本文更新于2019-06-29,使用MySQL 5.7,操作系统为Deepin 15.4。
数值函数
| 函数 |
作用 |
| ABS(x) |
绝对值 |
| CEIL(x) |
向上取整 |
| FLOOR(x) |
向下取整 |
| MOD(x, y) |
取余,等同x%y |
| RAND() |
[0, 1)区间的随机数 |
| ROUND(x[, n]) |
四舍五入至n位小数,n默认为0 |
| TRUNCATE(x, n) |
截断为n位小数 |
日期时间函数
| 函数 |
作用 |
| CURDATE() |
当前日期 |
| CURTIME() |
当前时间 |
| DATE_ADD(t, INTERVAL expr type) |
增加一定时间间隔 |
| DATEDIFF(later, previous) |
later减previous相差的天数,不考虑时间 |
| DATE_FORMAT(t, fmt) |
使用fmt格式化 |
| FROM_UNIXTIME(unix) |
UNIX时间戳的日期时间 |
| HOUR(t) |
小时 |
| MINUTE(t) |
分钟 |
| MONTHNAME(t) |
月份名(英文) |
| NOW() |
当前日期时间 |
| UNIX_TIMESTAMP(t) |
转换成UNIX时间戳 |
| WEEK(t) |
一年中的第几周 |
| YEAR(t) |
年份 |
DATE_ADD(t, INTERVAL expr type)的type可用如下的时间间隔类型。expr使用对应的格式,格式允许不严格的间隔(即任何标点符都可)。格式中的数值可使用负数。若整个格式就是一个数值,则可直接使用数值类型的格式,否则应使用字符串类型的格式。
| 时间间隔类型 |
格式 |
| YEAR |
YY |
| MONTH |
MM |
| DAY |
DD |
| HOUR |
hh |
| MINUTE |
mm |
| SECOND |
ss |
| YEAR_MONTH |
YY-MM |
| DAY_HOUR |
DD hh |
| DAY_MINUTE |
DD hh:mm |
| DAY_SECOND |
DD hh:mm:ss |
| HOUR_MINUTE |
hh:mm |
| HOUR_SECOND |
hh:mm:ss |
| MINUTE_SECOND |
mm:ss |
DATE_FORMAT(t, fmt)的fmt参数可使用的格式符如下:
| 格式符类型 |
格式符 |
说明 |
| 秒 |
%S/%s |
两位数字形式的秒(00, ..., 59) |
| 分 |
%i |
两位数字形式的分(00, ..., 59) |
| 时 |
%H |
两位数字形式的时,24小时制(00, ..., 23) |
| 时 |
%h/%I |
两位数字形式的时,12小时制(01, ..., 12) |
| 时 |
%k |
数字形式的时,24小时制(0, ..., 23) |
| 时 |
%l |
数字形式的时,12小时制(1, ..., 12) |
| 时分秒 |
%T |
两位数字,24小时制的时分秒(hh:mm:ss) |
| 时分秒 |
%r |
两位数字,12小时制的时分秒(hh:mm:ss AM/PM) |
| 上下午 |
%p |
AM或PM |
| 星期 |
%W |
英文星期(Sunday) |
| 星期 |
%a |
英文缩写星期(Sun) |
| 星期 |
%w |
数字形式的星期(0=Sunday) |
| 日 |
%d |
两位数字形式的日(01, ..., 31) |
| 日 |
%e |
数字形式的日(1, ..., 31) |
| 日 |
%D |
英文后缀形式的日(1st) |
| 月 |
%M |
英文月(January) |
| 月 |
%b |
英文缩写月(Jan) |
| 月 |
%m |
两位数字形式的月(01, ..., 12) |
| 月 |
%c |
数字形式的月(1, ..., 12) |
| 年 |
%Y |
4位数字形式的年 |
| 年 |
%y |
2位数字形式的年 |
|
%j |
一年中第几天,三位数字形式(001, ..., 366) |
|
%U |
一年中第几周,Sunday为周中第一天,第一个Sunday为第一周的开始,两位数字形式(00, ..., 52) |
|
%u |
一年中第几周,Monday为周中第一天,01-01为第一周的开始,两位数字形式(00, ..., 52) |
| % |
%% |
字符% |
字符串函数
字符串首字符的下标为1。
| 函数 |
作用 |
| CONCAT(v[, ...]) |
连接字符串,v也可以是数值 |
| INSERT(str, idx, len, substr) |
将str从idx(含)起的len个字符替换为substr |
| LEFT(str, len) |
取左侧len个字符 |
| LENGTH(str) |
字符串长度 |
| LOWER(str) |
转换成小写 |
| LPAD(str, len, pad) |
使用pad在str左侧填充至长度为len |
| LTRIM(str) |
去掉左侧空格 |
| REPEAT(str, n) |
重复n次 |
| REPLACE(str, old, new) |
使用new替换old |
| RIGHT(str, len) |
取右侧len个字符 |
| RPAD(str, len, pad) |
使用pad在str右侧填充至长度为len |
| RTRIM(str) |
去除右侧空格 |
| STRCMP(str1, str2) |
str1<str2返回-1,str1=str2返回0,str1>str2返回1 |
| SUBSTRING(str, idx, len) |
截取str从idx(含)起长度为len的子串 |
| TRIM(str) |
去掉两侧空格 |
| UPPER(str) |
转换成大写 |
流程函数
| 函数 |
作用 |
| IF(value, t, f) |
如果value为真则返回t,否则返回f |
| IFNULL(value, result) |
如果value不为NULL则返回value,否则返回result |
| CASE WHEN expr1 THEN result1 [WHEN ...] [ELSE default] END |
根据各表达式的真假返回结果 |
| CASE value WHEN enum1 THEN result1 [WHEN ...] [ELSE default] END |
value根据各枚举值返回结果 |
使用流程函数时注意NULL的情况。
聚合函数
| 函数 |
作用 |
| BIT_AND(row) |
按位与 |
| BIT_OR(row) |
按位或 |
其他函数
用于数据库管理的函数:
| 函数 |
作用 |
| CURRENT_USER() |
当前用户 |
| DATABASE() |
当前数据库名,同SCHEMA |
| PASSWORD(str) |
加密成系统密码,长度为41 |
| SCHEMA() |
当前数据库名,同DATABASE |
| USER() |
当前登录用户名 |
| VERSION() |
当前MySQL版本 |
用于辅助查询的函数:
| 函数 |
作用 |
| FOUND_ROWS() |
上一次查询返回的行数 |
| LAST_INSERT_ID() |
最后插入记录使用的自增长值。如一次插入多条记录,则返回第一条记录使用的自增长值 |
用于计算的函数:
| 函数 |
作用 |
| BIN(value) |
二进制形式表示 |
| CRC32(value) |
CRC32值 |
| HEX(value) |
十六进制形式表示 |
| INET_ATON(ip) |
IP从点分十进制转换成网络字节序整数 |
| INET_NTOA(uint) |
IP从网络字节序整数转换成点分十进制 |
| MD5(value) |
MD5值 |
| SHA1(value) |
SHA1值 |
全局变量
| 变量 |
作用 |
| CURRENT_TIMESTAMP |
当前时间戳 |