目录
一、常用函数(核心版)
1、MySQL 字符串函数 | ||
函数名称 | 作 用 | 示例 |
计算字符串长度函数,返回字符串的字节长度 | 使用 LENGTH 函数计算字符串长度 SELECT LENGTH('name'),LENGTH('数据库'); | |
合并字符串函数,返回结果为连接参数产生的字符串,参数可以使一个或多个 | SELECT CONCAT('MySQL','5.7') | |
替换字符串函数 | SELECT INSERT('Football',2,4,'Play') 从第 2 个字符开始,长度为 4 的字符串, 替换为 Play,结果为“FPlayall” | |
将字符串中的字母转换为小写 | SELECT LOWER('BLUE') | |
将字符串中的字母转换为大写 | SELECT UPPER('green') | |
从左侧截取字符串,返回字符串左边的若干个字符 | SELECT LEFT('MySQL',2); 返回My | |
从右侧字截取符串,返回字符串右边的若干个字符 | SELECT RIGHT('MySQL',3); 返回SQL | |
删除字符串左右两侧的空格 | SELECT TRIM(' mobile ') | |
字符串替换函数,返回替换后的新字符串 | SELECT REPLACE('aaa.mysql.com','a','w'); 将字符串的“a”字符替换为“w”字符 | |
截取字符串,返回从指定位置开始的指定长度的字符换 | SELECT SUBSTRING('computer',3,4) 返回从第 3 个位置开始长度为 4 的子字符串 | |
字符串反转(逆序)函数,返回顺序相反的字符串 | SELECT REVERSE('hello'); |
2、MySQL 日期和时间函数 | ||
函数名称 | 作 用 | 示例 |
返回当前系统的日期(年:月:日) current [ˈkʌrənt] 现在的 | SELECT CURDATE(); SELECT CURRENT_DATE(); | |
返回当前系统的时间 (时:分:秒) | SELECT CURTIME(); SELECT CURRENT_TIME(); | |
返回当前系统的日期和时间值 (年:月:日 时:分:秒) | SELECT NOW(); | |
获取年份 | SELECT YEAR(NOW()) | |
获取月份 | SELECT MONTH('2022-9-19'); | |
DAY | 获取日 | SELECT DAY(NOW()) |
获取指定日期是一年中的第几周 | SELECT WEEK(NOW()) | |
获取指定曰期对应的星期几的英文名称 (Monday) | SELECT DAYNAME(NOW()) | |
获取指定日期中的月份英文名称 (September) | SELECT MONTHNAME(NOW()) | |
获取指定曰期是一年中的第几天,返回值范围是1~366 | ||
获取指定日期是一个月中是第几天,返回值范围是1~31 | ||
获取指定日期对应的一周的第几天。 1 表示周日(周日是第一天) | SELECT DAYOFWEEK(NOW()) | |
将时间转换为秒数 (3605) | SELECT TIME_TO_SEC('1:00:5'); | |
将秒数转换为时间,与TIME_TO_SEC 互为反函数 | ||
ADDDATE和DATE_ADD | 都是向日期添加指定的时间间隔 interval [ˈɪntəvl] 间隔 | SELECT ADDDATE('2018-11-1',INTERVAL 1 DAY) SELECT DATE_ADD('2018-11-1',INTERVAL 1 MONTH) |
SUBDATE和DATE_SUB | 都是向日期减去指定的时间间隔 | SELECT DATE_SUB('2018-01-02',INTERVAL 1 DAY) |
时间加法运算,在原始时间上添加指定的时间 | SELECT ADDTIME('10:30:00','5:10:05'); | |
时间减法运算,在原始时间上减去指定的时间 | ||
获取两个日期之间间隔天数,参数1-参数2 | SELECT DATEDIFF('2017-11-30','2017-11-29') | |
格式化指定的日期,根据参数返回指定格式的值 | SELECT DATE_FORMAT('2022-11-15 21:45:00','%Y:%m:%d') SELECT DATE_FORMAT(NOW(),'%Y-%m-%d') SELECT DATE_FORMAT(NOW(),'%Y-%m-%d %H:%i:%s') | |
获取指定日期在一周内的对应的工作日索引 0 表示周一,1 表示周二 | SELECT WEEKDAY(NOW()); | |
获取UNIX时间戳函数,它会将参数值以'1970-01-01 00:00:00'GMT后的秒数的形式返回。(一个整数) | SELECT UNIX_TIMESTAMP() |
3、MySQL 聚合函数 | ||
函数名称 | 作用 | 示例 |
查询指定列的最大值 | SELECT MAX(score) FROM table; | |
查询指定列的最小值 | SELECT MIN(score) FROM table; | |
统计查询结果的行数 COUNT(*) 计算表中总的行数,无论某列有数值或者为空值。 COUNT(字段名)计算指定列下总的行数,计算时将忽略空值的行。 | SELECT COUNT(score) FROM table; | |
求和,返回指定列的总和 | SELECT SUM(score) FROM table; | |
求平均值,返回指定列数据的平均值 | SELECT AVG(score) FROM table; |
4、MySQL 数值型函数 | ||
函数名称 | 作 用 | 示例 |
求绝对值 | 求 5、-2.4、-24 和 0 的绝对值 SELECT ABS(5),ABS(-2.4),ABS(-24),ABS(0); | |
求二次方根 | SELECT SQRT(25),SQRT(120),SQRT(-9); | |
求余数 | ||
都是返回不小于参数的最小整数,即向上取整 | ||
向下取整,返回值转化为一个BIGINT | ||
生成一个0~1之间的随机数,传入整数参数是,用来产生重复序列 | ||
对所传参数进行四舍五入 | ||
返回参数的符号 | ||
所传参数的次方的结果值 | ||
求正弦值 | SELECT SIN(1),SIN(0.5*PI()); | |
求反正弦值,与函数 SIN 互为反函数 | ||
求余弦值 | ||
求反余弦值,与函数 COS 互为反函数 | ||
求正切值 | ||
求反正切值,与函数 TAN 互为反函数 | ||
求余切值 |
5、MySQL 流程控制函数 | ||
函数名称 | 作用 | 示例 |
判断 (流程控制) |
| |
判断是否为空 IFNULL(v1,v2); 如果 v1 不为 NULL,则 IFNULL 函数返回 v1; 否则返回 v2 的结果。 | | |
搜索语句 |
附录:时间格式表 | |
说明符 | 说明 |
%Y | 4 位数形式表示年份 |
%m | 月份,数字形式(00~12) |
%d | 该月日期,数字形式(00~31) |
%H | 以 2 位数表示 24 小时(00~23) |
%i | 分钟,数字形式(00~59) |
%S, %s | 以 2 位数形式表示秒(00~59) |
%W | 星期标识(周日、周一、周二…周六) Monday |
%a | 工作日的缩写名称(Sun~Sat) |
%b | 月份的缩写名称(Jan…Dec) |
%c | 月份,数字形式(0~12) |
%D | 带有英语后缀的该月日期(0th, 2st, 3nd,…) |
%e | 该月日期,数字形式((0~31) |
%f | 微秒(000000 …999999) |
%h, %I | 以 2 位数表示 12 小时(01~12) |
%j | —年中的天数(001~366) |
%k | 以 24 小时(0~23)表示 |
%l | 以12小时(1~12)表示 |
%M | 月份名称(January~December) |
%p | 上午(AM) 或下午(PM) |
%r | 时间,12小时制(小时 (hh): 分钟 (mm) : 秒数 (ss) 后加 AM 或 PM) |
%T | 时间,24 小时制(小时 (hh): 分钟 (mm): 秒数 (ss)) |
%U | 周(00~53),其中周日为每周的第一天 |
%u | 周(00~53),其中周一为每周的第一天 |
%V | 周(01~53),其中周日为每周的第一天,和%X同时使用 |
%v | 周(01~53),其中周一为每周的第一天,和%x同时使用 |
%w | —周中的每日(0= 周日…6= 周六) |
%X | 该周的年份,其中周日为每周的第一天,数字形式,4 位数,和%V同时使用 |
%x | 该周的年份,其中周一为每周的第一天,数字形式,4位数,和%v同时使用 |
%y | 2 位数形式表示年份 |
%% | %一个文字字符 |
二、SQL函数清单(完整版)
1、字符串函数
函数 | 描述 | 示例 |
CHAR_LENGTH(s) | 返回字符串s的字符数 | select char_length(sname) from student where sid=1; |
CHARACTER(s) | 返回字符串s的字符数 | select character_length(sname) from student where sid=1; |
CONCAT(s1,s2…sn) | 字符串 s1,s2 等多个字符串合并为一个字符串 | select concat(‘i’,‘love’,‘you’); |
FORMAT(x,n) | 函数可以将数字 x 进行格式化 “#,###.##”, 将 x 保留到小数点后 n 位,最后一位四舍五入。 | SELECT FORMAT(250500.5634, 2); – 输出 250,500.56 |
INSERT(s1,x,len,s2) | 字符串 s2 替换 s1 的 x 位置开始长度为 len 的字符串 | SELECT INSERT(“google.com”, 1, 6, “runnob”); – 输出:runoob.com |
LOCATE(s1,s) | 从字符串 s 中获取 s1 的开始位置 | SELECT LOCATE(‘st’,‘myteststring’); – 5 |
LCASE(s) | 将字符串 s 的所有字母变成小写字母 | SELECT LCASE(‘RUNOOB’) – runoob |
LOWER(s) | 将字符串 s 的所有字母变成小写字母 | SELECT LOWER(‘RUNOOB’) – runoob |
LTRIM(s) | 去掉字符串 s 开始处的空格 | SELECT LTRIM(" RUNOOB") AS LeftTrimmedString;-- RUNOOB |
MID(s,n,len) | 从字符串 s 的 n 位置截取长度为 len 的子字符串,同 SUBSTRING(s,n,len) | SELECT MID(“RUNOOB”, 2, 3) AS ExtractString; – UNO |
LEFT(s,n) | 返回字符串 s 的前 n 个字符 | SELECT LEFT(‘runoob’,2) – ru |
RIGHT(s,n) | 返回字符串 s 的后 n 个字符 | SELECT RIGHT(‘runoob’,2) – ob |
REPEAT(s,n) | 将字符串 s 重复 n 次 | SELECT REPEAT(‘runoob’,3) – runoobrunoobrunoob |
REPLACE(s,s1,s2) | 将字符串 s2 替代字符串 s 中的字符串 s1 | SELECT REPLACE(‘abc’,‘a’,‘x’) --xbc |
REVERSE(s) | 将字符串s的顺序反过来 | SELECT REVERSE(‘abc’) – cba |
RPAD(s1,len,s2) | 在字符串 s1 的结尾处添加字符串 s2,使字符串的长度达到 len | SELECT RPAD(‘abc’,5,‘xx’) – abcxx |
STRCMP(s1,s2) | 比较字符串 s1 和 s2,如果 s1 与 s2 相等返回 0 ,如果 s1>s2 返回 1,如果 s1<s2 返回 -1 | SELECT STRCMP(“runoob”, “runoob”); – 0 |
SUBSTR(s, start, length) | 从字符串 s 的 start 位置截取长度为 length 的子字符串 | SELECT SUBSTR(“RUNOOB”, 2, 3) ; – UNO |
SUBSTRING(s, start, length) | 从字符串 s 的 start 位置截取长度为 length 的子字符串 | SELECT SUBSTRING(“RUNOOB”, 2, 3) ; – UNO |
TRIM(s) | 去掉字符串 s 开始和结尾处的空格 | SELECT TRIM(’ RUNOOB ') AS TrimmedString; |
UCASE(s) | 将字符串转换为大写 | SELECT UCASE(“runoob”); – RUNOOB |
UPPER(s) | 将字符串转换为大写 | SELECT UPPER(“runoob”); – RUNOOB |
2、数学函数
函数名 | 描述 | 示例 |
ABS(x) | 返回 x 的绝对值 | SELECT ABS(-1) – 返回1 |
ACOS(x) | 求 x 的反余弦值(参数是弧度) | SELECT ACOS(0.25); |
ASIN(x) | 求反正弦值(参数是弧度) | SELECT ASIN(0.25); |
ATAN(x) | 求反正切值(参数是弧度) | SELECT ATAN(2.5); |
ATAN2(n, m) | 求反正切值(参数是弧度) | SELECT ATAN2(-0.8, 2); |
AVG(expression) | 返回一个表达式的平均值,expression 是一个字段 | SELECT AVG(Price) AS AveragePrice FROM Products; |
COS(x) | 求余弦值(参数是弧度) | SELECT COS(2); |
COT(x) | 求余切值(参数是弧度) | SELECT COT(6); |
COUNT(expression) | 返回查询的记录总数,expression 参数是一个字段或者 * 号 | SELECT COUNT(ProductID) AS NumberOfProducts FROM Products; |
DEGREES(x) | 将弧度转换为角度 | SELECT DEGREES(3.1415926535898) – 180 |
EXP(x) | 返回 e 的 x 次方 | SELECT EXP(3) – 20.085536923188 |
FLOOR(x) | 返回小于或等于 x 的最大整数 | SELECT FLOOR(1.5) – 返回1 |
GREATEST(expr1, expr2, expr3, …) | 返回列表中的最大值 | SELECT GREATEST(3, 12, 34, 8, 25); – 34 |
LEAST(expr1, expr2, expr3, …) | 返回列表中的最小值 | SELECT LEAST(3, 12, 34, 8, 25); – 3 |
LOG(x) 或 LOG(base, x) | 返回自然对数(以 e 为底的对数),如果带有 base 参数,则 base 为指定带底数。 | SELECT LOG(2, 4); – 2 |
LOG10(x) | 返回以 10 为底的对数 | SELECT LOG10(100) – 2 |
LOG2(x) | 返回以 2 为底的对数 | SELECT LOG2(6); – 2.584962500721156 |
MAX(expression) | 返回字段 expression 中的最大值 | SELECT MAX(Price) AS LargestPrice FROM Products; |
MIN(expression) | 返回字段 expression 中的最小值 | SELECT MIN(Price) AS MinPrice FROM Products; |
MOD(x,y) | 返回 x 除以 y 以后的余数 | SELECT MOD(5,2) – 1 |
PI() | 返回圆周率(3.141593) | SELECT PI() --3.141593 |
POW(x,y) | 返回 x 的 y 次方 | SELECT POW(2,3) – 8 |
POWER(x,y) | 返回 x 的 y 次方 | SELECT POWER(2,3) – 8 |
RADIANS(x) | 将角度转换为弧度 | SELECT RADIANS(180) – 3.1415926535898 |
RAND() | 返回 0 到 1 的随机数 | SELECT RAND() --0.93099315644334 |
ROUND(x) | 返回离 x 最近的整数 | SELECT ROUND(1.23456) --1 |
SIGN(x) | 返回 x 的符号,x 是负数、0、正数分别返回 -1、0 和 1 | SELECT SIGN(-10) – (-1) |
SIN(x) | 求正弦值(参数是弧度) | SELECT SIN(RADIANS(30)) – 0.5 |
SQRT(x) | 返回x的平方根 | SELECT SQRT(25) – 5 |
SUM(expression) | 返回指定字段的总和 | SELECT SUM(Quantity) AS TotalItemsOrdered FROM OrderDetails; |
TAN(x) | 求正切值(参数是弧度) | SELECT TAN(1.75); – -5.52037992250933 |
3、日期函数
函数名 | 描述 | 示例 |
ADDDATE(d,n) | 计算起始日期 d 加上 n 天的日期 | SELECT ADDDATE(“2017-06-15”, INTERVAL 10 DAY);2017-06-25 |
ADDTIME(t,n) | 时间 t 加上 n 秒的时间 | SELECT ADDTIME(‘2011-11-11 11:11:11’, 5) --2011-11-11 11:11:16 (秒) |
CURDATE() | 返回当前日期 | SELECT CURDATE(); 2018-09-19 |
CURRENT_DATE() | 返回当前日期 | SELECT CURRENT_DATE();–2018-09-19 |
CURRENT_TIME | 返回当前时间 | SELECT CURRENT_TIME();–19:59:02 |
CURRENT_TIMESTAMP() | 返回当前日期和时间 | SELECT CURRENT_TIMESTAMP() – 2018-09-19 20:57:43 |
DATE() | 从日期或日期时间表达式中提取日期值 | SELECT DATE(“2017-06-15”); --2017-06-15 |
DATEDIFF(d1,d2) | 计算日期 d1->d2 之间相隔的天数 | SELECT DATEDIFF(‘2001-01-01’,‘2001-02-02’) --32 |
DATE_ADD(d,INTERVAL expr type) | 计算起始日期 d 加上一个时间段后的日期 | SELECT ADDDATE(‘2011-11-11 11:11:11’, INTERVAL 5 MINUTE)—2011-11-11 11:16:11 |
DATE_FORMAT(d,f) | 按表达式 f的要求显示日期 d | SELECT DATE_FORMAT(‘2011-11-11 11:11:11’,’%Y-%m-%d %r’)----2011-11-11 11:11:11 AM |
DATE_SUB(date,INTERVAL expr type) | 函数从日期减去指定的时间间隔。 | SELECT OrderId,DATE_SUB(OrderDate,INTERVAL 2 DAY) AS OrderPayDate FROM Orders |
DAY(d) | 返回日期 d 是星期几,如 Monday,Tuesday | SELECT DAYNAME(‘2011-11-11 11:11:11’)–Friday |
DAYOFMONTH(d) | 计算日期 d 是本月的第几天 | SELECT DAYOFMONTH(‘2011-11-11 11:11:11’)–11 |
DAYOFWEEK(d) | 日期 d 今天是星期几,1 星期日,2 星期一,以此类推 | SELECT DAYOFWEEK(‘2011-11-11 11:11:11’)–6 |
DAYOFYEAR(d) | 计算日期 d 是本年的第几天 | SELECT DAYOFYEAR(‘2011-11-11 11:11:11’)–315 |
FROM_DAYS(n) | 计算从 0000 年 1 月 1 日开始 n 天后的日期 | SELECT FROM_DAYS(1111) --0003-01-16 |
HOUR(t) | 返回 t 中的小时值 | SELECT HOUR(‘1:2:3’)—1 |
LAST_DAY(d) | 返回给给定日期的那一月份的最后一天 | SELECT LAST_DAY(“2017-06-20”);–2017-06-30 |
LOCALTIME() | 返回当前日期和时间 | SELECT LOCALTIME()—2018-09-19 20:57:43 |
LOCALTIMESTAMP() | 返回当前日期和时间 | SELECT LOCALTIMESTAMP()----2018-09-19 20:57:43 |
MAKETIME(hour, minute, second) | 组合时间,参数分别为小时、分钟、秒 | SELECT MAKETIME(11, 35, 4);–11:35:04 |
MINUTE(t) | 返回 t 中的分钟值 | SELECT MINUTE(‘1:2:3’)–2 |
MONTHNAME(d) | 返回日期当中的月份名称,如 November | SELECT MONTHNAME(‘2011-11-11 11:11:11’)–November |
MONTH(d) | 返回日期d中的月份值,1 到 12 | SELECT MONTH(‘2011-11-11 11:11:11’)—11 |
NOW() | 返回当前日期和时间 | SELECT NOW()–2018-09-19 20:57:43 |
QUARTER(d) | 返回日期d是第几季节,返回 1 到 4 | SELECT QUARTER(‘2011-11-11 11:11:11’)----4 |
SECOND(t) | 返回 t 中的秒钟值 | SELECT SECOND(‘1:2:3’)—3 |
SEC_TO_TIME(s) | 将以秒为单位的时间 s 转换为时分秒的格式 | SELECT SEC_TO_TIME(4320)–01:12:00 |
STR_TO_DATE(string, format_mask) | 将字符串转变为日期 | SELECT STR_TO_DATE(“August 10 2017”, “%M %d %Y”);–2017-08-10 |
SUBDATE(d,n) | 日期 d 减去 n 天后的日期 | SELECT SUBDATE(‘2011-11-11 11:11:11’, 1)–2011-11-10 11:11:11 (默认是天) |
SYSDATE() | 返回当前日期和时间 | SELECT SYSDATE()----2018-09-19 20:57:43 |
TIME(expression) | 提取传入表达式的时间部分 | SELECT TIME(“19:30:10”);–19:30:10 |
TIME_FORMAT(t,f) | 按表达式 f 的要求显示时间 t | SELECT TIME_FORMAT(‘11:11:11’,’%r’)—11:11:11 AM |
TIME_TO_SEC(t) | 将时间 t 转换为秒 | SELECT TIME_TO_SEC(‘1:12:00’)–4320 |
TIMEDIFF(time1, time2) | 计算时间差值 | SELECT TIMEDIFF(“13:10:11”, “13:10:10”);–00:00:01 |
TIMESTAMP(expression, interval) | 单个参数时,函数返回日期或日期时间表达式;有2个参数时,将参数加和 | SELECT TIMESTAMP(“2017-07-23”, “13:10:11”);–2017-07-23 13:10:11 |
TO_DAYS(d) | 计算日期 d 距离 0000 年 1 月 1 日的天数 | SELECT TO_DAYS(‘0001-01-01 01:01:01’)–366 |
WEEK(d) | 计算日期 d 是本年的第几个星期,范围是 0 到 53 | SELECT WEEK(‘2011-11-11 11:11:11’)–45 |
WEEKDAY(d) | 日期 d 是星期几,0 表示星期一,1 表示星期二 | SELECT WEEKDAY(“2017-06-15”);–3 |
WEEKOFYEAR(d) | 计算日期 d 是本年的第几个星期,范围是 0 到 53 | SELECT WEEKOFYEAR(‘2011-11-11 11:11:11’)–45 |
YEAR(d) | 返回年份 | SELECT YEAR(“2017-06-15”);-2017 |
YEARWEEK(date, mode) | 返回年份及第几周(0到53),mode 中 0 表示周天,1表示周一,以此类推 | SELECT YEARWEEK(“2017-06-15”);–201724 |
4、Mysql高级函数
函数名 | 描述 | 示例 |
BIN(x) | 返回 x 的二进制编码 | SELECT BIN(15); - 1111 |
BINARY(s) | 将字符串 s 转换为二进制字符串 | SELECT BINARY “RUNOOB”;–RUNOOB |
CAST(x AS type) | 转换数据类型 | SELECT CAST(“2017-08-29” AS DATE);-- 2017-08-29 |
COALESCE(expr1, expr2, …, expr_n) | 返回参数中的第一个非空表达式(从左向右) | SELECT COALESCE(NULL, NULL, NULL, ‘runoob.com’, NULL, ‘google.com’);-- runoob.com |
CONNECTION_ID() | 返回唯一的连接 ID | SELECT CONNECTION_ID();—4292835 |
CONV(x,f1,f2) | 返回 f1 进制数变成 f2 进制数 | SELECT CONV(15, 10, 2);–1111 |
CONVERT(s USING cs) | 函数将字符串 s 的字符集变成 cs | SELECT CHARSET(‘ABC’)–utf-8 |
DATABASE() | 返回当前数据库名 | SELECT DATABASE(); --runoob |
IF(expr,v1,v2) | 如果表达式 expr 成立,返回结果 v1;否则,返回结果 v2 | SELECT IF(1 > 0,‘正确’,‘错误’) --正确 |
IFNULL(v1,v2) | 如果 v1 的值不为 NULL,则返回 v1,否则返回 v2。 | SELECT IFNULL(null,‘Hello Word’)–Hello Word |
ISNULL(expression) | 判断表达式是否为 NULL | SELECT ISNULL(NULL); --1 |
LAST_INSERT_ID() | 返回最近生成的 AUTO_INCREMENT 值 | SELECT LAST_INSERT_ID();–6 |
NULLIF(expr1, expr2) | 比较两个字符串,如果字符串 expr1 与 expr2 相等 返回 NULL,否则返回 expr1 | SELECT NULLIF(25, 25);–null |
CURRENT_USER() | 返回当前用户 | SELECT CURRENT_USER();–guest@% |
SESSION_USER() | 返回当前用户 | SELECT SESSION_USER();–guest@% |
SYSTEM_USER() | 返回当前用户 | SELECT SYSTEM_USER();–guest@% |
USER() | 返回当前用户 | SELECT USER();–guest@% |
VERSION() | 返回数据库的版本号 | SELECT VERSION()–5.6.34 |
case ex when cond1 then r1 when cond2 then r2 else r end | CASE 表示函数开始,END 表示函数结束。如果 cond1 成立,则返回 r1, 如果 cond2 成立,则返回 r2,当全部不成立则返回 result,而当有一个成立之后,后面的就不执行了。 | SELECT CASE WHEN 1 > 0 THEN '1 > 0 ’ WHEN 2 > 0 THEN ‘2 > 0’ ELSE '3 > 0 ’ END --1>0 |