MySQL内置函数(二)

接上文:

查看当前 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)
相关推荐
杜子不疼.2 小时前
从 0 到 1:基于 Spring Boot 4 + Redis + MySQL 构建高可用电商后端系统
spring boot·redis·mysql
月明长歌2 小时前
怎么把 SQL 的增删改查写成“稳、准、可维护”的
java·数据库·sql
小蜗牛的路2 小时前
MySQL-连接很慢,10秒钟才有响应、Temporary failure in name resolution
数据库·mysql
jiedaodezhuti2 小时前
网络安全等级保护:合规基石与风险管理核心
linux
嵌入式@秋刀鱼2 小时前
ROS开发学习记录【一】
linux·c++·笔记·学习
Tipriest_2 小时前
Linux(debian)包管理器aptitude介绍
linux·运维·debian·aptitude
l1t2 小时前
DeepSeek总结的SQL 数独:约束编程
数据库·sql
菩提祖师_2 小时前
基于单片机指纹密码门禁的设计与实现
数据库·单片机·嵌入式硬件
码上宝藏2 小时前
从解耦到拓展:Clapper 0.10.0 插件化架构设计与 Lua 脚本集成
linux·开发语言·lua·视频播放器·clapper