Skip to content

函数

函数表示对输入参数值返回一个具有特定关系的值,MySQL 提供了大量丰富的函数,在进行数据库管理以及数据的查询和操作时将会经常用到各种函数。
通过对数据的处理,数据库功能可以变得更加强大,可以更加灵活地满足不同用户的需求。

各类函数从功能方面主要分为数学函数、字符串函数、日期和时间函数、条件判断函数、系统信息函数和加密函数等其他函数。

数学函数

字符串函数

MySQL 中的字符串函数有计算字符串长度函数、字符串合并函数、字符串替换函数、字符串比较函数、查找指定字符串位置函数等。

计算字符串字符数的函数和字符串长度的函数

CHAR_LENGTH(str) 返回值为字符串 str 所包含的字符个数。一个多字节字符算作一个单字符。

例:

1
2
3
4
5
6
7
8
SELECT CHAR_LENGTH('date'), CHAR_LENGTH('egg');

+---------------------+--------------------+
| CHAR_LENGTH('date') | CHAR_LENGTH('egg') |
+---------------------+--------------------+
|                   4 |                  3 |
+---------------------+--------------------+
1 row in set (0.04 sec)

LENGTH(str)返回值为字符串的字节长度,使用 utf8(UNICODE 的最终变长字符编码,又称万国码)编码字符集时,一个汉字时 3 字节,一个数字或字母算 1 字节。

1
2
3
4
5
6
7
8
SELECT LENGTH('date'), LENGTH('egg'),LENGTH('吃饭'),LENGTH('2333');

+----------------+---------------+------------------+----------------+
| LENGTH('date') | LENGTH('egg') | LENGTH('吃饭')   | LENGTH('2333') |
+----------------+---------------+------------------+----------------+
|              4 |             3 |                6 |              4 |
+----------------+---------------+------------------+----------------+
1 row in set (0.00 sec)

日期和时间函数

条件判断函数

条件判断函数也称为控制流程函数,根据满足的不同条件,执行相应的流程。
MySQL 中进行条件判断的函数有 IF、IFNULL 和 CASE.

IF(expr,v1,v2)函数

IF(expr, v1,v2): 如果表达式 expr 是 TRUE(expr<>0 and expr <> NULL),则返回值为 v1; 否则返回值为 v2。
IF() 的返回值为数字值或字符串值,具体情况视其所在语境而定。

例:

1
2
3
4
5
6
7
8
SELECT IF(1>2,2,3), IF(1<2,'yes','no'), IF(STRCMP('test','test1'),'no','yes');

+-------------+--------------------+---------------------------------------+
| IF(1>2,2,3) | IF(1<2,'yes','no') | IF(STRCMP('test','test1'),'no','yes') |
+-------------+--------------------+---------------------------------------+
|           3 | yes                | no                                    |
+-------------+--------------------+---------------------------------------+
1 row in set (0.07 sec)

系统信息函数

获取 MySQL 版本号、连接数和数据库名的函数:

1
2
3
4
5
6
7
8
SELECT VERSION();

+-----------+
| VERSION() |
+-----------+
| 8.0.23    |
+-----------+
1 row in set (0.01 sec)

CONNECTION_ID() 返回 MySQL 服务器当前连接的次数,每个连接都有各自唯一的 ID

1
2
3
4
5
6
7
8
9
SELECT CONNECTION_ID();

mysql> SELECT CONNECTION_ID();
+-----------------+
| CONNECTION_ID() |
+-----------------+
|              26 |
+-----------------+
1 row in set (0.01 sec)

返回值根据登录的次数会有所不同

1
2
3
4
5
6
7
8
9
SHOW PROCESSLIST;

+----+-----------------+-----------+---------+---------+--------+------------------------+------------------+
| Id | User            | Host      | db      | Command | Time   | State                  | Info             |
+----+-----------------+-----------+---------+---------+--------+------------------------+------------------+
|  5 | event_scheduler | localhost | NULL    | Daemon  | 394954 | Waiting on empty queue | NULL             |
| 26 | root            | localhost | test_db | Query   |      0 | init                   | SHOW PROCESSLIST |
+----+-----------------+-----------+---------+---------+--------+------------------------+------------------+
2 rows in set (0.01 sec)

8.0新特性1-加密函数

其他函数

8.0 新特性2-窗口函数