本文更新于2021-02-14,使用MySQL 5.7,操作系统为Deepin 15.4。
全局变量
变量 |
作用 |
CURRENT_DATE |
当前日期 |
CURRENT_TIME |
当前时间 |
CURRENT_TIMESTAMP |
当前日期时间 |
数值函数
函数 |
作用 |
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) |
按位或 |
其他函数
用于数据库管理的函数:
函数 |
作用 |
BENCHMARK(times, statement) |
对语句进行性能测试 |
CURRENT_USER() |
当前认证的用户名和主机,mysql.user表中的值 |
DATABASE() |
当前数据库名,同SCHEMA |
PASSWORD(str) |
加密成系统密码,結果长度为41 |
SCHEMA() |
当前数据库名,同DATABASE |
SESSION_USER() |
当前客户端的用户名和主机,同USER |
SYSTEM_USER() |
当前客户端的用户名和主机,同USER |
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值 |