接上文:
查看当前 exam_result 表
sql
mysql> select * from exam_result;
+----+-----------+---------+------+---------+
| id | name | chinese | math | english |
+----+-----------+---------+------+---------+
| 1 | 唐三藏 | 67 | 98 | 56 |
| 2 | 孙悟空 | 87 | 78 | 77 |
| 3 | 猪悟能 | 88 | 98 | 90 |
| 4 | 曹孟德 | 82 | 84 | 67 |
| 5 | 刘玄德 | 55 | 85 | 45 |
| 6 | 孙权 | 70 | 73 | 78 |
| 7 | 宋公明 | 75 | 65 | 30 |
| 8 | Amy | NULL | 80 | 100 |
| 9 | 鲁智深 | 88 | 98 | NULL |
+----+-----------+---------+------+---------+
9 rows in set (0.00 sec)
三、字符串函数

- 获取当前表的name列的字符集
sql
mysql> select charset(name) from exam_result;
+---------------+
| charset(name) |
+---------------+
| utf8mb4 |
| utf8mb4 |
| utf8mb4 |
| utf8mb4 |
| utf8mb4 |
| utf8mb4 |
| utf8mb4 |
| utf8mb4 |
| utf8mb4 |
+---------------+
9 rows in set (0.00 sec)
- 显示exam_result表中的信息,显示格式:"XXX的语文是XXX分,数学XXX分,英语XXX分
sql
mysql> select concat(name, '的语文是',chinese,'分,数学是',math,'分') as '分数' from exam_result;
+---------------------------------------------+
| 分数 |
+---------------------------------------------+
| 唐三藏的语文是67分,数学是98分 |
| 孙悟空的语文是87分,数学是78分 |
| 猪悟能的语文是88分,数学是98分 |
| 曹孟德的语文是82分,数学是84分 |
| 刘玄德的语文是55分,数学是85分 |
| 孙权的语文是70分,数学是73分 |
| 宋公明的语文是75分,数学是65分 |
| NULL |
| 鲁智深的语文是88分,数学是98分 |
+---------------------------------------------+
9 rows in set (0.00 sec)
- 求表中学生姓名占用的字节数
sql
mysql> select length(name), name from exam_result;
+--------------+-----------+
| length(name) | name |
+--------------+-----------+
| 9 | 唐三藏 |
| 9 | 孙悟空 |
| 9 | 猪悟能 |
| 9 | 曹孟德 |
| 9 | 刘玄德 |
| 6 | 孙权 |
| 9 | 宋公明 |
| 3 | Amy |
| 9 | 鲁智深 |
+--------------+-----------+
9 rows in set (0.00 sec)
注意:
length函数返回字符串长度,以字节为单位。如果是多字节字符则计算多个字节数;如果是单字节字符则算作一个字节。比如:字母,数字算作一个字节,中文表示多个字节数时(与字符集编码有关)
- 将表中所有成绩中有8的替换成'中国'
sql
mysql> select replace(chinese, '8', '中国') , chinese from exam_result;
+---------------------------------+---------+
| replace(chinese, '8', '中国') | chinese |
+---------------------------------+---------+
| 67 | 67 |
| 中国7 | 87 |
| 中国中国 | 88 |
| 中国2 | 82 |
| 55 | 55 |
| 70 | 70 |
| 75 | 75 |
| NULL | NULL |
| 中国中国 | 88 |
+---------------------------------+---------+
9 rows in set (0.00 sec)
- 截取表中name字段的第二个到第三个字符
sql
mysql> select substring(name, 2, 2), name from exam_result;
+-----------------------+-----------+
| substring(name, 2, 2) | name |
+-----------------------+-----------+
| 三藏 | 唐三藏 |
| 悟空 | 孙悟空 |
| 悟能 | 猪悟能 |
| 孟德 | 曹孟德 |
| 玄德 | 刘玄德 |
| 权 | 孙权 |
| 公明 | 宋公明 |
| my | Amy |
| 智深 | 鲁智深 |
+-----------------------+-----------+
9 rows in set (0.00 sec)
四、数学函数

- 绝对值
sql
mysql> select abs(-88.66);
+-------------+
| abs(-88.66) |
+-------------+
| 88.66 |
+-------------+
1 row in set (0.00 sec)
- 向上取整
sql
mysql> select ceiling (6.1);
+---------------+
| ceiling (6.1) |
+---------------+
| 7 |
+---------------+
1 row in set (0.00 sec)
mysql> select ceiling (-6.1);
+----------------+
| ceiling (-6.1) |
+----------------+
| -6 |
+----------------+
1 row in set (0.00 sec)
- 向下取整
sql
mysql> select floor (-6.1);
+--------------+
| floor (-6.1) |
+--------------+
| -7 |
+--------------+
1 row in set (0.00 sec)
mysql> select floor (6.1);
+-------------+
| floor (6.1) |
+-------------+
| 6 |
+-------------+
1 row in set (0.00 sec)
- 保留指定小数位数(小数四舍五入)
sql
mysql> select format (6.123456, 2);
+----------------------+
| format (6.123456, 2) |
+----------------------+
| 6.12 |
+----------------------+
1 row in set (0.00 sec)
mysql> select format (6.123456, 5);
+----------------------+
| format (6.123456, 5) |
+----------------------+
| 6.12346 |
+----------------------+
1 row in set (0.00 sec)
- 产生随机数
sql
mysql> select rand();
+--------------------+
| rand() |
+--------------------+
| 0.8589433616576189 |
+--------------------+
1 row in set (0.00 sec)
- 产生0~100之间的随机数
sql
mysql> select format(rand()*100, 0);
+-----------------------+
| format(rand()*100, 0) |
+-----------------------+
| 92 |
+-----------------------+
1 row in set (0.00 sec)
mysql> select format(rand()*100, 0);
+-----------------------+
| format(rand()*100, 0) |
+-----------------------+
| 0 |
+-----------------------+
1 row in set (0.00 sec)
mysql> select format(rand()*100, 0);
+-----------------------+
| format(rand()*100, 0) |
+-----------------------+
| 27 |
+-----------------------+
1 row in set (0.00 sec)
- 取模
sql
mysql> select mod (10, -3);
+--------------+
| mod (10, -3) |
+--------------+
| 1 |
+--------------+
1 row in set (0.00 sec)
mysql> select mod (-10, -3);
+---------------+
| mod (-10, -3) |
+---------------+
| -1 |
+---------------+
1 row in set (0.00 sec)
mysql> select mod (-10, 3);
+--------------+
| mod (-10, 3) |
+--------------+
| -1 |
+--------------+
1 row in set (0.00 sec)
五、其他函数
- 查询当前用户
sql
mysql> select user();
+----------------+
| user() |
+----------------+
| root@localhost |
+----------------+
1 row in set (0.00 sec)
- 显示当前正在使用的数据库
sql
mysql> select database();
+------------+
| database() |
+------------+
| db6 |
+------------+
1 row in set (0.00 sec)
- 对一个字符串进行md5摘要,摘要后得到一个32位字符串
md5()函数用于计算字符串的MD5哈希值。MD5是一种广泛使用的加密哈希函数,产生一个128位(16字节)的哈希值,通常表示为32个十六进制数字。 不可逆:无法从哈希值恢复原始字符串。不推荐用于密码存储
sql
mysql> select md5('hello world');
+----------------------------------+
| md5('hello world') |
+----------------------------------+
| 5eb63bbbe01eeed093cb22bb8f5acdc3 |
+----------------------------------+
1 row in set (0.00 sec)
- password()
PASSWORD()函数是MySQL特有的函数,用于从明文密码生成哈希值,主要用于MySQL的用户认证系统。注意:从MySQL 5.7.6开始,PASSWORD()函数被弃用,并在MySQL 8.0中被移除。
- ifnull(val1, val2) 如果val1为null,返回val2,否则返回val1的值
sql
mysql> select ifnull ('abc', '123');
+-----------------------+
| ifnull ('abc', '123') |
+-----------------------+
| abc |
+-----------------------+
1 row in set (0.00 sec)
mysql> select ifnull (null, '123');
+----------------------+
| ifnull (null, '123') |
+----------------------+
| 123 |
+----------------------+
1 row in set (0.00 sec)