MySQL 中提供了丰富的函数,通过这些函数可以简化用户对数据的操作。MySQL中的函数包括数学函数、字符串函数、日期和时间函数、条件判断函数、加密函数等。由于函数数量较多,不可能一一进行讲解,接下来通过 5 张表对其中一些常用函数的作用进行说明,如表下所示。
数学函数
函数名称 | 作用 |
ABS(x) | 返回x的绝对值 |
SQRT(x) | 返回x的非负2次方根 |
MOD(x,y) | 返回x被y除后的余数 |
CEILING(x) | 返回不小于x的最小整数 |
FLOOR(x) | 回不大于x的最大整数 |
ROUND(x,y) | 返对x进行四舍五人操作,小数点后保留y位 |
TRUNCATE(x,y) | 舍去x中小数点y位后面的数 |
SIGN(x) | 返回x的符号,-1、0 或者1 |
字符串函数
函数名称 | 作用 |
LENGTH(str) | 返回字符串 str 的长度 |
CONCAT(s1,s2,…) | 返回一个或者多个字符串连接产生的新的字符串 |
TRIM(str) | 删除字符串两侧的空格 |
REPLACE(str,s1,s2) | 使用字符串 s2 替换字符串 str 中所有的字符串 s1 |
SUBSTRING(str,n,len) | 返回字符串 str 的子串,起始位置为 n,长度为 len |
REVERSE(str) | 返回字符串反转后的结果 |
LOCATE(s1,str) | 返回子串 s1 在字符串 str 中的起始位置 |
日期和时间函数
函数名称 | 作用 |
CURDATEO() | 获取系统当前日期 |
CURTIME() | 获取系统当前时间 |
SYSDATE() | 获取当前系统日期和时间 |
TIME_TO_SECO() | 返回将时间转换成秒的结果 |
ADDDATEO() | 执行日期的加运算 |
SBUDATE() | 执行日期的减运算 |
DATE FORMAT() | 格式化输出日期和时间值 |
条件判断函数
函数名称 | 作用 |
IF(expr,v1,v2) | 如果 expr 表达式为 true 返回 v1,否则返回 v2 |
IFNULL(v1,v2) | 如果 v1 不为 NULL 返回 v1,否则返回 v2 |
CASE expr WHEN v1 THEN r1[WHEN v2 THEN r2…][ELSE rn] END | 如果 expr 值等于 v1、v2 等,则返回对应位置 THEN后面的结果,否则返回 ELSE后的结果 rn |
加密函数
函数名称 | 作用 |
MD5(str) | 对字符串 str 进行 MD5 加密 |
ENCODE(str,pwd str) | 使用 pwd 作为密码加密字符串 str |
DECODE(str,pwd_str) | 使用 pwd 作为密码解密字符串 str |
以上是对 MySQL 中常用函数的用法做介绍,下面就以函数 CONCAT(s1,s2,…) 和 IF(expr,v1,v2) 为例,通过案例对这两个函数的使用进行演示。
例如,查询 student 表中的所有记录,将各个字段值使用下划线“_”连接起来,SQL 语句如下所示:
SELECT CONCAT (id,'_',name,'_',grade,'_',gender) FROM student;
执行结果结果如下所示:
mysql> SELECT CONCAT (id,'_',name,'_',grade,'_',gender) FROM student;
+-------------------------------------------+
| CONCAT (id,'_',name,'_',grade,'_',gender) |
+-------------------------------------------+
| 1_songjiang_40_男 |
| 2_wuyong_100_男 |
| 3_ginming_90_男 |
| 4_husanniang_88_女 |
| 5_sunerniang_66_女 |
| 6_wusong_86_男 |
| 7_linchong_92_男 |
| NULL |
+-------------------------------------------+
8 rows in set (0.00 sec)
从查询结果可以看到,通过调用 CONCAT 函数将 student 表中各个字段的值使用下划线连接起来了。需要注意的是:CONCAT(str1,str2,…) 返回结果为连接参数产生的字符串。如有任何一个参数为 NULL,则返回值为 NULL。
例如,查询 student 表中的 id 和 gender 字段值,如果 gender 字段的值为“男’则返回1,如果不为“男”则返回 0 ,SQL 语句如下所示:
SELECT id,IF(gender='男',1,0) FROM student;
执行结果如下所示:
mysql> SELECT id,IF(gender='男',1,0) FROM student;
+----+----------------------+
| id | IF(gender='男',1,0) |
+----+----------------------+
| 1 | 1 |
| 2 | 1 |
| 3 | 1 |
| 4 | 0 |
| 5 | 0 |
| 6 | 1 |
| 7 | 1 |
| 8 | 0 |
+----+----------------------+
10 rows in set (0.01 sec)
从查询结果可以看到,student 表中 gender 字段值为“男”的记录都返回 1,gender 字段值为“女”或者“NULL”的记录都返回0。