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)
相关推荐
Francek Chen16 分钟前
【大数据存储与管理】NoSQL数据库:01 NoSQL简介
大数据·数据库·分布式·nosql
sbjdhjd24 分钟前
Docker | 核心概念科普 + 保姆级部署
linux·运维·服务器·docker·云原生·面试·eureka
charlie11451419124 分钟前
嵌入式C++教程实战之Linux下的单片机编程(9):HAL时钟使能 —— 不开时钟,外设就是一坨睡死的硅
linux·开发语言·c++·单片机·嵌入式硬件·c
以太浮标27 分钟前
华为eNSP模拟器综合实验之- DHCP、DNS、HTTP和FTP服务器配置案例Client-Server
linux·服务器·windows·http·华为·信息与通信
摇滚侠35 分钟前
Vmvare 虚拟机安装 Linux CentOS 7 操作系统 一键安装 Docker 1Panel 一键安装 MySQL Redis OpenClaw
linux·docker·centos
一只大袋鼠38 分钟前
MySQL 事务从入门到精通(上):概念、操作、特性、隔离级别全解析
java·mysql·事务
路溪非溪41 分钟前
如何使用procfs来排查问题
linux·arm开发·驱动开发
Database_Cool_43 分钟前
【无标题】
数据库·阿里云·ai
帕里亚1 小时前
ubuntu18.04 APT升级 glibc2.28 (Jetson)
linux·运维·windows