赞
踩
MySQL 有很多内置的函数,以下列出了这些函数的说明。
MySQL字符串函数
函数 | 描述 | 实例 |
---|---|---|
ASCII(s) | 返回字符串 s 的第一个字符的 ASCII 码。 | 返回字符串 CSDN 的第一个字符的 ASCII 码:SELECT ASCII("CSDN") AS NumCodeOfFirstChar; -- 返回 67 |
CHAR_LENGTH(s) | 返回字符串 s 的字符数。 | 返回字符串 CSDN 的字符数:SELECT CHAR_LENGTH("CSDN") AS LengthOfString; -- 返回 4 |
CHARACTER_LENGTH(s) | 同 CHAR_LENGTH(s) 函数。 | 返回字符串 CSDN 的字符数:SELECT CHARACTER_LENGTH("CSDN") AS LengthOfString; -- 返回 4 |
CONCAT(s1,s2,…sn) | 字符串 s1,s2等多个字符串合并为一个字符串。 | 合并多个字符串:SELECT CONCAT("Hello ","World") AS ConcatEnactString; -- 返回 Hello World |
CONCAT_WS(x,s1,s2,…sn) | 同 CONCAT(s1,s2,…sn) 函数,但是每个字符串之间要加上 x,x 可以是分隔符。 | 合并多个字符串,并添加分隔符:SELECT CONCAT_WS("-","Hello","World") AS ConcatEnactString; -- 返回 Hello-World |
FIELD(s,s1,s2,…sn) | 返回第一个字符串 s 在字符串列表(s1,s2,…sn)中的位置。 | 返回字符串 c 在列表值中的位置:SELECT FIELD("c","a","b","c","d","e"); -- 返回 3 |
FIND_IN_SET(s1,s2) | 返回在字符串s2中与s1匹配的字符串的位置。 | 返回字符串 c 在指定字符串中的位置:SELECT FIND_IN_SET("c","a,b,c,d,e"); -- 返回 3 |
FORMAT(x,n) | 函数可以将数字 x 进行格式化 “#,###.##”, 将 x 保留到小数点后 n 位,最后一位四舍五入。 | 格式化数字 “#,###.##” 形式:SELECT FORMAT(260800.5634, 2); -- 返回 260,800.56 |
INSERT(s1,x,len,s2) | 字符串 s2 替换 s1 中的 x 位置开始长度为 len 的字符串。 | 从字符串第一个位置开始的 6 个字符替换为 CSDN:SELECT INSERT("google.com",1,6,"CSDN"); -- 返回 CSDN.com |
REPLACE(s,s1,s2) | 字符串 s2 替换 s 中的 s1 字符串。 | 将字符串 google.com 中的 google 替换为 CSDN:SELECT REPLACE("google.com","google","CSDN"); -- 返回 CSDN.com |
LOCATE(s1,s) | 从字符串 s 中获取 s1 的开始位置。 | 从字符串 my test string 中获取 test 的开始位置:SELECT LOCATE("test","my test string"); -- 返回 4 |
POSITION(s1 in s) | 同 LOCATE(s1,s) 函数。 | 从字符串 my test string 中获取 test 的开始位置:SELECT POSITION("test" in "my test string"); -- 返回 4 |
LCASE(s) | 将字符串 s 的所有字母转换为小写字母。 | 将字符串 CSDN 的所有字母转换为小写字母:SELECT LCASE("CSDN"); -- 返回 csdn |
LOWER(s) | 将字符串 s 的所有字母转换为小写字母。 | 将字符串 CSDN 的所有字母转换为小写字母:SELECT LOWER("CSDN"); -- 返回 csdn |
UCASE(s) | 将字符串 s 的所有字母转换为大写字母。 | 将字符串 csdn 的所有字母转换为大写字母:SELECT UCASE("csdn"); -- 返回 CSDN |
UPPER(s) | 将字符串 s 的所有字母转换为大写字母。 | 将字符串 csdn 的所有字母转换为大写字母:SELECT UPPER("csdn"); -- 返回 CSDN |
LEFT(s,n) | 返回字符串 s 的前 n 个字符。 | 返回字符串 CSDN 的前两个字符:SELECT LEFT("CSDN",2); -- 返回 CS |
RIGHT(s,n) | 返回字符串 s 的后 n 个字符。 | 返回字符串 CSDN 的后两个字符:SELECT RIGHT("CSDN",2); -- 返回 DN |
MID(s,start,length) | 从字符串 s 的 start 位置截取长度为 length 的子字符串。 | 从字符串 CSDN 的第 2 个位置截取 2 个字符:SELECT MID("CSDN",2,2); -- 返回 SD |
SUBSTR(s,start,length) | 同 MID(s,start,length) 函数。 | 从字符串 CSDN 的第 2 个位置截取 2 个字符:SELECT SUBSTR("CSDN",2,2); -- 返回 SD |
SUBSTRING(s,start,length) | 同 SUBSTR(s,start,length) 函数。 | 从字符串 CSDN 的第 2 个位置截取 2 个字符:SELECT SUBSTRING("CSDN",2,2); -- 返回 SD |
SUBSTRING_INDEX(s,delimiter,number) | 返回字符串 s 从左边/右边开始第 number 个出现的分隔符 delimiter 左边/右边的子字符串。如果 number 是正数,返回字符串 s 从左边开始第 number 个出现的分隔符 delimiter 左边的子字符串;如果 number 是负数,返回字符串 s 从右边开始第 number 的绝对值个出现的分隔符 delimiter 右边的子字符串。 | 从字符串 CSDN 的第 2 个位置截取 2 个字符:SELECT SUBSTRING_INDEX("a*b*c*d","*",2); -- 返回 a*b |
LPAD(s1,len,s2) | 在字符串 s1 的开始处填充字符串 s2,使字符串长度达到 len。 | 将字符串 xx 填充到 abc 字符串的开始处:SELECT LPAD("abc",5,"xx"); -- 返回 xxabc |
RPAD(s1,len,s2) | 在字符串 s1 的结尾处填充字符串 s2,使字符串长度达到 len。 | 将字符串 xx 填充到 abc 字符串的结尾处:SELECT RPAD("abc",5,"xx"); -- 返回 abcxx |
LTRIM(s) | 去掉字符串 s 开始处的空格。 | 去掉字符串 CSDN 开始处的空格:SELECT LTRIM(" CSDN"); -- 返回 CSDN |
RTRIM(s) | 去掉字符串 s 结尾处的空格。 | 去掉字符串 CSDN 结尾处的空格:SELECT RTRIM("CSDN "); -- 返回 CSDN |
TRIM(s) | 去掉字符串 s 开始和结尾处的空格。 | 去掉字符串 CSDN 开始和结尾处的空格:SELECT TRIM(" CSDN "); -- 返回 CSDN |
SPACE(n) | 返回 n 个空格。 | 返回 10 个空格:SELECT SPACE(10); |
REPEAT(s,n) | 将字符串 s 重复 n 次。 | 将字符串 CSDN 重复三次:SELECT REPEAT("CSDN",3); -- 返回 CSDNCSDNCSDN |
REVERSE(s) | 将字符串 s 的顺序反转。 | 将字符串 CSDN 的顺序反转:SELECT REVERSE("CSDN"); -- 返回 NDSC |
STRCMP(s1,s2) | 比较字符串 s1 和 s2,如果 s1 与 s2 相等返回 0,如果 s1>s2 返回 1,如果 s1<s2 返回 -1。 | 比较字符串:SELECT STRCMP("CSDN","CSDN"); -- 返回 0 |
MySQL 数字函数
函数 | 描述 | 实例 |
---|---|---|
ABS(x) | 返回 x 的绝对值。 | 返回 -1 的绝对值:SELECT ABS(-1); -- 返回 1 |
PI() | 返回圆周率(π)。 | 返回圆周率(π):SELECT PI(); |
SIN(x) | 返回 x 的正弦值(参数为弧度)。 | 返回 π/2 的正弦值:SELECT SIN(PI()/2); |
COS(x) | 返回 x 的余弦值(参数为弧度)。 | 返回 π/2 的余弦值:SELECT COS(PI()/2); |
TAN(x) | 返回 x 的正切值(参数为弧度)。 | 返回 π/4 的正切值:SELECT TAN(PI()/4); |
COT(x) | 返回 x 的余切值(参数为弧度)。 | 返回 π/4 的余切值:SELECT COT(PI()/4); |
ASIN(x) | 返回 x 的反正弦值(参数为弧度)。 | 返回 1 的反正弦值:SELECT ASIN(1); |
ACOS(x) | 返回 x 的反余弦值(参数为弧度)。 | 返回 1 的反余弦值:SELECT ACOS(1); |
ATAN(x) | 返回 x 的反正切值(参数为弧度)。 | 返回 1 的反正切值:SELECT ATAN(1); |
ATAN2(x,y) | 返回 (x,y) 的反正切值(参数为弧度)。 | 返回坐标 (-1,2) 的反正切值:SELECT ATAN2(-1,2); |
DEGREES(x) | 将弧度转换为角度。 | 将 π/2 转换为角度:SELECT DEGREES(PI()/2); |
RADIANS(x) | 将角度转换为弧度。 | 将 90° 转换为弧度:SELECT RADIANS(90); |
MAX(expression) | 返回一个表达式的最大值,expression 是一个字段。 | 返回 Products 表中 Price 字段的最大值:SELECT MAX(Price) AS MaxPrice FROM Products; |
MIN(expression) | 返回一个表达式的最小值,expression 是一个字段。 | 返回 Products 表中 Price 字段的最小值:SELECT MIN(Price) AS MinPrice FROM Products; |
AVG(expression) | 返回一个表达式的平均值,expression 是一个字段。 | 返回 Products 表中 Price 字段的平均值:SELECT AVG(Price) AS AveragePrice FROM Products; |
SUM(expression) | 返回一个表达式的总和,expression 是一个字段。 | 返回 Products 表中 Price 字段的总和:SELECT SUM(Price) AS TotalPrice FROM Products; |
COUNT(expression) | 返回查询的记录总数,expression 参数是一个字段或者 * 号。 | 返回 Products 表中总共有多少条记录:SELECT COUNT(*) FROM Products; |
CEIL(x) | x 向上取整。 | 1.5 向上取整:SELECT CEIL(1.5); -- 返回 2 |
CEILING(x) | 同 CEIL(x) 函数。 | 1.5 向上取整:SELECT CEILING(1.5); -- 返回 2 |
FLOOR(x) | x 向下取整。 | 1.5 向下取整:SELECT FLOOR(1.5); -- 返回 1 |
n DIV m | 整除,n 为被除数,m 为除数。 | 计算 12 除以 5:SELECT 12 DIV 5; -- 返回 2 |
MOD(n,m) | 返回 n 除以 m 的余数。 | 返回 12 除以 5 的余数:SELECT MOD(12,5); -- 返回 2 |
EXP(x) | 返回 e 的 x 次方。 | 计算 e 的 3 次方:SELECT EXP(3); |
POW(n,x) | 返回 n 的 x 次方。 | 计算 2 的 3 次方:SELECT POW(2,3); -- 返回 8 |
POWER(n,x) | 同 POW(n,x) 函数。 | 计算 2 的 3 次方:SELECT POWER(2,3); -- 返回 8 |
SQRT(x) | 返回 x 的平方根。 | 返回 36 的平方根:SELECT SQRT(36); -- 返回 6 |
GREATEST(s1,s2,…sn) | 返回列表中的最大值。 | 返回以下数字列表中的最大值:SELECT GREATEST(3,12,24,10,6,20); -- 返回 24 返回以下字符串列表中的最大值: SELECT GREATEST("Google","CSDN","Microsoft"); -- 返回 Microsoft |
LEAST(s1,s2,…sn) | 返回列表中的最小值。 | 返回以下数字列表中的最小值:SELECT LEAST(3,12,24,10,6,20); -- 返回 3 返回以下字符串列表中的最小值: SELECT LEAST("Google","CSDN","Microsoft"); -- 返回 CSDN |
LN(x) | 返回 x 的自然对数,以 e 为底。 | 返回 2 的自然对数:SELECT LN(2); |
LOG2(x) | 返回以 2 为底的对数。 | 返回以 2 为底 6 的对数:SELECT LOG2(6); |
LOG10(x) | 返回以 10 为底的对数。 | 返回以 10 为底 100 的对数:SELECT LOG10(100); |
LOG([base],x) | 返回以 base 为底的对数,可选参数 base 如果省略,则返回以 e 为底的自然对数。 | 返回以 6 为底 36 的对数:SELECT LOG(6,36); |
RAND() | 返回 0 到 1 的随机数。 | 返回 0 到 1 的随机数:SELECT RAND(); |
ROUND(x,[y]) | 返回离 x 最近的整数,可选参数 y 表示要四舍五入的小数位数,如果省略,则返回整数。 | 3.1415926 保留 2 位小数:SELECT ROUND(3.1415926,2); -- 返回 3.14 |
TRUNCATE(x,y) | 返回 x 保留小数点后 y 位的值(与 ROUND(x,[y]) 函数最大的区别是不会进行四舍五入)。 | 3.1415926 保留 4 位小数,不进行四舍五入:SELECT TRUNCATE(3.1415926,4); -- 返回 3.1415 |
SIGN(x) | 返回 x 的符号,x 是负数、0、正数分别返回 -1、0、1。 | 返回 -6 的符号:SELECT SIGN(-6); -- 返回 -1 |
MySQL 日期函数
函数 | 描述 | 实例 |
---|---|---|
CURDATE() | 返回当前日期。 | 返回当前日期:SELECT CURDATE(); |
CURRENT_DATE() | 同 CURDATE() 函数。 | 返回当前日期:SELECT CURRENT_DATE(); |
CURTIME() | 返回当前时间。 | 返回当前时间:SELECT CURTIME(); |
CURRENT_TIME() | 同 CURTIME() 函数。 | 返回当前时间:SELECT CURRENT_TIME(); |
NOW() | 返回当前日期和时间。 | 返回当前日期和时间:SELECT NOW(); |
SYSDATE() | 同 NOW() 函数。 | 返回当前日期和时间:SELECT SYSDATE(); |
CURRENT_TIMESTAMP() | 同 SYSDATE() 函数。 | 返回当前日期和时间:SELECT CURRENT_TIMESTAMP(); |
LOCALTIME() | 同 CURRENT_TIMESTAMP() 函数。 | 返回当前日期和时间:SELECT LOCALTIME(); |
LOCALTIMESTAMP() | 同 LOCALTIME() 函数。 | 返回当前日期和时间:SELECT LOCALTIMESTAMP(); |
ADDDATE(d,INTERVAL n type) | 计算起始日期 d 加上一个时间段后的日期,type 值可以是:MICROSECOND、SECOND、MINUTE、HOUR、DAY、WEEK、MONTH、QUARTER、YEAR、SECOND_MICROSECOND、MINUTE_MICROSECOND、MINUTE_SECOND、HOUR_MICROSECOND、HOUR_SECOND、HOUR_MINUTE、DAY_MICROSECOND、DAY_SECOND、DAY_MINUTE、DAY_HOUR、YEAR_MONTH。 | 返回 2022-10-10 10:26:36 加上 10 天后的日期和时间:SELECT ADDDATE("2022-10-10 10:26:36",INTERVAL 10 DAY) -- 返回 2022-10-20 10:26:36; 返回 2022-10-10 10:26:36 加上 10 分钟后的日期和时间: SELECT ADDDATE("2022-10-10 10:26:36",INTERVAL 10 MINUTE) -- 返回 2022-10-10 10:36:36; 返回 2022-10-10 10:26:36 减去 10 小时后的日期和时间: SELECT ADDDATE("2022-10-10 10:26:36",INTERVAL -10 HOUR) -- 返回 2022-10-10 00:26:36; 返回 2022-10-10 10:26:36 减去 10 个月后的日期和时间: SELECT ADDDATE("2022-10-10 10:26:36",INTERVAL -10 MONTH) -- 返回 2021-12-10 10:26:36; |
DATE_ADD(d,INTERVAL n type) | 同 ADDDATE(d,INTERVAL x type) 函数。 | 返回 2022-10-10 10:26:36 加上 10 天后的日期和时间:SELECT DATE_ADD("2022-10-10 10:26:36",INTERVAL 10 DAY) -- 返回 2022-10-20 10:26:36; 返回 2022-10-10 10:26:36 加上 10 分钟后的日期和时间: SELECT DATE_ADD("2022-10-10 10:26:36",INTERVAL 10 MINUTE) -- 返回 2022-10-10 10:36:36; 返回 2022-10-10 10:26:36 减去 10 小时后的日期和时间: SELECT DATE_ADD("2022-10-10 10:26:36",INTERVAL -10 HOUR) -- 返回 2022-10-10 00:26:36; 返回 2022-10-10 10:26:36 减去 10 个月后的日期和时间: SELECT DATE_ADD("2022-10-10 10:26:36",INTERVAL -10 MONTH) -- 返回 2021-12-10 10:26:36; |
SUBDATE(d,INTERVAL n type) | 计算起始日期 d 减去一个时间段后的日期,type 值可以是:MICROSECOND、SECOND、MINUTE、HOUR、DAY、WEEK、MONTH、QUARTER、YEAR、SECOND_MICROSECOND、MINUTE_MICROSECOND、MINUTE_SECOND、HOUR_MICROSECOND、HOUR_SECOND、HOUR_MINUTE、DAY_MICROSECOND、DAY_SECOND、DAY_MINUTE、DAY_HOUR、YEAR_MONTH。 | 返回 2022-10-10 10:26:36 减去 10 天后的日期和时间:SELECT SUBDATE("2022-10-10 10:26:36",INTERVAL 10 DAY) -- 返回 2022-09-30 10:26:36; 返回 2022-10-10 10:26:36 减去 10 分钟后的日期和时间: SELECT SUBDATE("2022-10-10 10:26:36",INTERVAL 10 MINUTE) -- 返回 2022-10-10 10:16:36; 返回 2022-10-10 10:26:36 加上 10 小时后的日期和时间: SELECT SUBDATE("2022-10-10 10:26:36",INTERVAL -10 HOUR) -- 返回 2022-10-10 20:26:36; 返回 2022-10-10 10:26:36 加上 10 个月后的日期和时间: SELECT SUBDATE("2022-10-10 10:26:36",INTERVAL -10 MONTH) -- 返回 2023-08-10 10:26:36; |
DATE_SUB(d,INTERVAL n type) | 同 SUBDATE(d,INTERVAL x type) 函数。 | 返回 2022-10-10 10:26:36 减去 10 天后的日期和时间:SELECT DATE_SUB("2022-10-10 10:26:36",INTERVAL 10 DAY) -- 返回 2022-09-30 10:26:36; 返回 2022-10-10 10:26:36 减去 10 分钟后的日期和时间: SELECT DATE_SUB("2022-10-10 10:26:36",INTERVAL 10 MINUTE) -- 返回 2022-10-10 10:16:36; 返回 2022-10-10 10:26:36 加上 10 小时后的日期和时间: SELECT DATE_SUB("2022-10-10 10:26:36",INTERVAL -10 HOUR) -- 返回 2022-10-10 20:26:36; 返回 2022-10-10 10:26:36 加上 10 个月后的日期和时间: SELECT DATE_SUB("2022-10-10 10:26:36",INTERVAL -10 MONTH) -- 返回 2023-08-10 10:26:36; |
ADDTIME(t,n) | 计算起始时间 t 加上一个时间段后的时间。 | 返回 2022-10-10 10:26:36 加上 10 秒后的日期和时间:SELECT ADDTIME("2022-10-10 10:26:36",10) -- 返回 2022-10-10 10:26:46; 返回 2022-10-10 10:26:36 加上 2 小时 10 分钟 20 秒后的日期和时间: SELECT ADDTIME("2022-10-10 10:26:36","02:10:20") -- 返回 2022-10-10 12:36:56; 返回 2022-10-10 10:26:36 减去 10 秒后的日期和时间: SELECT ADDTIME("2022-10-10 10:26:36",-10) -- 返回 2022-10-10 10:26:26; 返回 2022-10-10 10:26:36 减去 2 小时 10 分钟 20 秒后的日期和时间: SELECT ADDTIME("2022-10-10 10:26:36","-02:10:20") -- 返回 2022-10-10 08:16:16; |
SUBTIME(t,n) | 计算起始时间 t 减去一个时间段后的时间。 | 返回 2022-10-10 10:26:36 减去 10 秒后的日期和时间:SELECT SUBTIME("2022-10-10 10:26:36",10) -- 返回 2022-10-10 10:26:26; 返回 2022-10-10 10:26:36 减去 2 小时 10 分钟 20 秒后的日期和时间: SELECT SUBTIME("2022-10-10 10:26:36","02:10:20") -- 返回 2022-10-10 08:16:16; 返回 2022-10-10 10:26:36 加上 10 秒后的日期和时间: SELECT SUBTIME("2022-10-10 10:26:36",-10) -- 返回 2022-10-10 10:26:46; 返回 2022-10-10 10:26:36 加上 2 小时 10 分钟 20 秒后的日期和时间: SELECT SUBTIME("2022-10-10 10:26:36","-02:10:20") -- 返回 2022-10-10 12:36:56; |
PERIOD_ADD(p,n) | 为年-月组合日期添加一个时段。 | 2022 年 10 月加上 2 个月:SELECT PERIOD_ADD(202210,2) -- 返回 202212; 2022 年 10 月减去 2 个月: SELECT PERIOD_ADD(202210,-2) -- 返回 202208; |
TIMESTAMP(d,t) | 一个参数时,函数返回日期或日期时间表达式;两个参数时,函数返回两个参数的和。 | 一个参数:SELECT TIMESTAMP("2022-10-10") -- 返回 2022-10-10 00:00:00; 两个参数: SELECT TIMESTAMP("2021-12-31 10:26:46","20:00:00") -- 返回 2022-01-01 06:26:46; |
DATE(d) | 从日期或日期时间表达式中提取日期。 | 从 2022-10-10 10:26:36 中提取日期:SELECT DATE("2022-10-10 10:26:36") -- 返回 2022-10-10; |
TIME(d) | 从时间或日期时间表达式中提取时间。 | 从 2022-10-10 10:26:36 中提取时间:SELECT TIME("2022-10-10 10:26:36") -- 返回 10:26:36; |
EXTRACT(type FROM d) | 从日期 d 中获取指定的值,type 值可以是:MICROSECOND、SECOND、MINUTE、HOUR、DAY、WEEK、MONTH、QUARTER、YEAR、SECOND_MICROSECOND、MINUTE_MICROSECOND、MINUTE_SECOND、HOUR_MICROSECOND、HOUR_SECOND、HOUR_MINUTE、DAY_MICROSECOND、DAY_SECOND、DAY_MINUTE、DAY_HOUR、YEAR_MONTH。 | 返回 2022-10-10 10:26:36 的年份部分:SELECT EXTRACT(YEAR FROM "2022-10-10 10:26:36") -- 返回 2022; 返回 2022-10-10 10:26:36 是第几周: SELECT EXTRACT(WEEK FROM "2022-10-10 10:26:36") -- 返回 41; |
QUARTER(d) | 返回日期 d 是第几季度,返回 1 到 4。 | 返回 2022-06-10 是第几季度:SELECT QUARTER("2022-06-10") -- 返回 2; |
YEARWEEK(d,[mode]) | 返回年份及第几周(1 到 53),mode 中 0 表示周天是一周的起始日期,1 表示周一是一周的起始日期,2 表示周天是一周的起始日期,3 表示周一是一周的起始日期,以此类推。 | 返回年份及第几周:SELECT YEARWEEK("2023-01-01"); -- 返回 202301 SELECT YEARWEEK("2023-01-01",0); -- 返回 202301 SELECT YEARWEEK("2023-01-01",1); -- 返回 202252 SELECT YEARWEEK("2023-01-01",2); -- 返回 202301 SELECT YEARWEEK("2023-01-01",3); -- 返回 202252 |
WEEK(d) | 返回日期 d 是第几周,返回 0 到 53。 | 返回 2022-01-01 是第几周:SELECT WEEK("2022-01-01") -- 返回 0; |
WEEKOFYEAR(d) | 返回日期 d 是第几周,返回 1 到 52。 | 返回 2022-01-01 是第几周:SELECT WEEKOFYEAR("2022-01-01") -- 返回 52; |
YEAR(d) | 返回日期 d 的年份部分。 | 返回 2022-01-10 的年份部分:SELECT YEAR("2022-01-10") -- 返回 2022; |
MONTH(d) | 返回日期 d 的月份部分,1 到 12。 | 返回 2022-01-10 的月份部分:SELECT MONTH("2022-01-10") -- 返回 1; |
DAY(d) | 返回日期 d 的日期部分,1 到 31。 | 返回 2022-10-01 的日期部分:SELECT DAY("2022-10-01") -- 返回 1; |
HOUR(t) | 返回时间 t 的小时部分。 | 返回 24:10:20 的小时部分:SELECT HOUR("24:10:20") -- 返回 24; |
MINUTE(t) | 返回时间 t 的分钟部分,0 到 59。 | 返回 12:00:20 的分钟部分:SELECT MINUTE("12:00:20") -- 返回 0; |
SECOND(t) | 返回时间 t 的秒钟部分,0 到 59。 | 返回 12:10:00 的秒钟部分:SELECT SECOND("12:10:00") -- 返回 0; |
MICROSECOND(t) | 返回时间 t 的微秒部分。 | 返回 12:10:20.000068 的微秒部分:SELECT MICROSECOND("12:10:20.000068") -- 返回 68; |
DAYNAME(d) | 返回日期 d 是星期几,如 Monday、Tuesday。 | 返回 2022-10-10 是星期几:SELECT DAYNAME("2022-10-10") -- 返回 Monday; |
DAYOFWEEK(d) | 返回日期 d 是星期几,1 星期日,2 星期一,以此类推。 | 返回 2022-10-10 是星期几:SELECT DAYOFWEEK("2022-10-10") -- 返回 2; |
WEEKDAY(d) | 返回日期 d 是星期几,0 星期一,1 星期二,以此类推。 | 返回 2022-10-10 是星期几:SELECT WEEKDAY("2022-10-10") -- 返回 0; |
MONTHNAME(d) | 返回日期 d 是几月,如 January、February。 | 返回 2022-10-10 是几月:SELECT MONTHNAME("2022-10-10") -- 返回 October; |
DAYOFMONTH(d) | 计算日期 d 是本月的第几天。 | 返回 2022-10-10 是本月的第几天:SELECT DAYOFMONTH("2022-10-10") -- 返回 10; |
DAYOFYEAR(d) | 计算日期 d 是本年的第几天。 | 返回 2022-10-10 是本年的第几天:SELECT DAYOFYEAR("2022-10-10") -- 返回 283; |
LAST_DAY(d) | 返回日期 d 所在月份的最后一天。 | 返回 2022-10-10 所在月份的最后一天:SELECT LAST_DAY("2022-10-10") -- 返回 2022-10-31; |
FROM_DAYS(n) | 计算从 0000 年 01 月 01 日开始 n 天后的日期。 | 返回 0000 年 01 月 01 日开始 10000 天后的日期:SELECT FROM_DAYS(10000) -- 返回 0027-05-19; |
TO_DAYS(d) | 计算日期 d 距离 0000 年 01 月 01 日的天数。 | 返回 2022-10-10 12:26:36 距离 0000 年 01 月 01 日的天数:SELECT TO_DAYS("2022-10-10 12:26:36") -- 返回 738803; |
TIMESTAMPDIFF(type,d1,d2) | 计算日期 d1->d2 之间的时间差,type 值可以是:MICROSECOND、SECOND、MINUTE、HOUR、DAY、WEEK、MONTH、QUARTER、YEAR、SECOND_MICROSECOND、MINUTE_MICROSECOND、MINUTE_SECOND、HOUR_MICROSECOND、HOUR_SECOND、HOUR_MINUTE、DAY_MICROSECOND、DAY_SECOND、DAY_MINUTE、DAY_HOUR、YEAR_MONTH。 | 计算两个时间相隔多少周:SELECT TIMESTAMPDIFF(WEEK,"2022-06-10 10:26:36","2022-10-10 12:26:36") -- 返回 17; 计算两个时间相隔多少分钟: SELECT TIMESTAMPDIFF(MINUTE,"2022-10-12","2022-10-10 12:26:36") -- 返回 -2133; |
DATEDIFF(d1,d2) | 计算日期 d1->d2 之间相隔的天数。 | 返回 2022-01-01->2022-02-02 之间相隔的天数:SELECT DATEDIFF("2022-01-01","2022-02-02") -- 返回 -32; |
PERIOD_DIFF(p1,p2) | 计算时段 p1->p2 之间相隔的月数。 | 返回 202210->202202 之间相隔的月数:SELECT PERIOD_DIFF(202210,202202) -- 返回 8; |
TIMEDIFF(t1,t2) | 计算时间 t1->t2 之间相隔的时间。 | 返回 12:10:20->18:10:20 之间相隔的时间:SELECT TIMEDIFF("20:10:20","18:10:20") -- 返回 02:00:00; |
DATE_FORMAT(d,f) | 按表达式 f 的要求显示日期 d。 | 格式化日期:SELECT DATE_FORMAT("2022-01-01 12:10:20","%Y-%m-%d %r") -- 返回 2022-01-01 12:10:20 PM; |
TIME_FORMAT(t,f) | 按表达式 f 的要求显示时间 t。 | 格式化时间:SELECT TIME_FORMAT("12:10:20","%r") -- 返回 12:10:20 PM; |
MAKEDATE(year,day-of-year) | 基于给定参数年份 year 和所在年中的天数序号 day-of-year 返回一个日期。 | 返回 2022 年第 10 天的日期:SELECT MAKEDATE(2022,10) -- 返回 2022-01-10; |
MAKETIME(hour,minute,second) | 组合时间,参数分别为小时、分钟、秒。 | 12 时 10 分 20 秒:SELECT MAKETIME(12,10,20) -- 返回 12:10:20; |
SEC_TO_TIME(s) | 将以秒为单位的时间 s 转换为时分秒的格式。 | 将 4320 秒转换为时分秒的格式:SELECT SEC_TO_TIME(4320) -- 返回 01:12:00; |
TIME_TO_SEC(t) | 将时分秒 t 转换为以秒为单位的时间。 | 将 01:12:00 转换为以秒为单位的时间:SELECT TIME_TO_SEC("01:12:00") -- 返回 4320; |
STR_TO_DATE(string,format) | 将字符串转换为日期。 | 将 August 10 2022 转换为日期:SELECT STR_TO_DATE("August 10 2022","%M %d %Y") -- 返回 2022-08-10; |
MySQL 高级函数
函数 | 描述 | 实例 |
---|---|---|
BIN(x) | 返回 x 的二进制编码。 | 16 的二进制编码:SELECT BIN(16) -- 返回 10000; |
BINARY(s) | 将字符串 s 转换为二进制字符串。 | 将字符串 CSDN 转换为二进制字符串:SELECT BINARY("CSDN") -- 返回 CSDN; |
CASE expression WHEN condition1 THEN result1 WHEN condition2 THEN result2 … WHEN conditionN THEN resultN ELSE result END | CASE 表示函数开始,END 表示函数结束。如果 condition1 成立,则返回 result1;如果 condition2 成立,则返回 result2;如果 conditionN 成立,则返回 resultN;当全部不成立则返回 result,而当有一个成立之后,后面的就不执行了。 | 返回今天是星期几:SELECT CASE DAYOFWEEK(NOW()) WHEN 1 THEN "星期日" WHEN 2 THEN "星期一" WHEN 3 THEN "星期二" WHEN 4 THEN "星期三" WHEN 5 THEN "星期四" WHEN 6 THEN "星期五" WHEN 7 THEN "星期六" ELSE "异常" END; |
CAST(x AS type) | 转换数据类型。 | 将字符串 20200101 转换为日期:SELECT CAST("20200101" AS DATE) -- 返回 2020-01-01; |
COALESCE(s1,s2,…sn) | 返回参数中的第一个非空表达式(从左向右)。 | 返回参数中的第一个非空表达式(从左向右):SELECT COALESCE(NULL,NULL,"CSDN",NULL,"Google") -- 返回 CSDN; |
CONNECTION_ID() | 返回唯一的连接 ID。 | 返回唯一的连接 ID:SELECT CONNECTION_ID(); |
CONV(x,f1,f2) | 将 x 由 f1 进制转换为 f2 进制。 | 将 12 由十进制转换为二进制:SELECT CONV(12,10,2) -- 返回 1100; |
CONVERT(s USING cs) | 将字符串 s 的字符集转换为 cs。 | 将字符串 ABC 的字符集转换为 GBK:SELECT CHARSET(CONVERT("ABC" USING GBK)) -- 返回 gbk; |
USER() | 返回当前用户和 IP 地址。 | 返回当前用户和 IP 地址:SELECT USER(); |
SYSTEM_USER() | 同 USER() 函数。 | 返回当前用户和 IP 地址:SELECT SYSTEM_USER(); |
SESSION_USER() | 同 SYSTEM_USER() 函数。 | 返回当前用户和 IP 地址:SELECT SESSION_USER(); |
CURRENT_USER() | 返回当前用户。 | 返回当前用户:SELECT CURRENT_USER(); |
DATABASE() | 返回当前数据库名。 | 返回当前数据库名:SELECT DATABASE(); |
VERSION() | 返回数据库版本号。 | 返回数据库版本号:SELECT VERSION(); |
IF(expression,s1,s2) | 如果表达式 expression 成立,返回 s1;否则,返回 s2。 | 判断 1+1=2 是否正确:SELECT IF(1 + 1 = 2,"True","False") -- 返回 True; |
IFNULL(s1,s2) | 如果 s1 不为 NULL,返回 s1,否则,返回 s2。 | SELECT IFNULL(NULL,"Hello World") -- 返回 Hello World; |
NULLIF(s1,s2) | 比较 s1 和 s2,如果 s1 与 s2 相等,返回 NULL;否则,返回 s1。 | SELECT NULLIF("ABC","ABC") -- 返回 ; |
ISNULL(expression) | 判断表达式是否为 NULL。 | 判断表达式是否为 NULL:SELECT ISNULL(NULL) -- 返回 1; |
LAST_INSERT_ID() | 返回最近生成的 AUTO_INCREMENT 值。 | 返回最近生成的 AUTO_INCREMENT 值:SELECT LAST_INSERT_ID(); |
以下是 MySQL 8.0 版本新增的一些常用函数:
函数 | 描述 | 实例 |
---|---|---|
JSON_OBJECT(k1,v1,k2,v2,…kn,vn) | 将键值对转换为 JSON 对象。 | 将键值对转换为 JSON 对象:SELECT JSON_OBJECT("name","小明","gender","男","age",12) -- 返回 {"age": 12, "name": "小明", "gender": "男"}; |
JSON_ARRAY(a1,a2,…an) | 将值转换为 JSON 数组。 | 将值转换为 JSON 数组:SELECT JSON_ARRAY(1,2,"three") -- 返回 [1, 2, "three"]; |
JSON_EXTRACT(json,path) | 从 JSON 中提取指定的值。 | 从 JSON 中提取 name 的值:SELECT JSON_EXTRACT(JSON_OBJECT("name","小明","gender","男","age",12),"$.name") -- 返回 "小明"; 从 JSON 中提取索引为 0 的值: SELECT JSON_EXTRACT(JSON_ARRAY(1,2,"three"),"$[0]") -- 返回 1; |
JSON_CONTAINS(json1,json2,[path]) | 检查 JSON 中是否包含指定的值,可选参数 path 表示在指定的路径中检查,如果省略,则在整个 JSON 中检查。 | 在整个 JSON 中检查是否包含 “小明”:SELECT JSON_CONTAINS(JSON_OBJECT("name","小明","gender","男","age",12),'"小明"') -- 返回 0; 在整个 JSON 中检查是否包含 {“name”:“小明”}: SELECT JSON_CONTAINS(JSON_OBJECT("name","小明","gender","男","age",12),'{"name":"小明"}') -- 返回 1; 在指定路径中检查是否包含 “小明”: SELECT JSON_CONTAINS(JSON_OBJECT("name","小明","gender","男","age",12),'"小明"',"$.name") -- 返回 1; |
ROW_NUMBER() [OVER(PARTITION BY expression ORDER BY expression)] | 生成其分区内每行的行号。OVER是可选参数,PARTITION BY 表示如何将查询结果划分分区,如果省略,则将所有查询结果视为一个分区;ORDER BY 表示如何将每个分区的查询结果排序,如果省略,则每个分区的查询结果是无序的。 | 查询 sales 表,生成其分区内每行的行号。:SELECT year,country,product,profit, ROW_NUMBER() AS row_number1, ROW_NUMBER() OVER(PARTITION BY country) AS row_number2, ROW_NUMBER() OVER(PARTITION BY country ORDER BY year,product) AS row_number3 FROM sales; |
RANK() [OVER(PARTITION BY expression ORDER BY expression)] | 生成其分区内每行的行号(带间隔)。OVER是可选参数,PARTITION BY 表示如何将查询结果划分分区,如果省略,则将所有查询结果视为一个分区;ORDER BY 表示如何将每个分区的查询结果排序,如果省略,则每个分区的查询结果是无序的。 | 查询 sales 表,生成其分区内每行的行号。:SELECT year,country,product, ROW_NUMBER() OVER(PARTITION BY country ORDER BY year,product) AS row_number RANK() OVER(PARTITION BY country ORDER BY year,product) AS rank FROM sales; |
DENSE_RANK() [OVER(PARTITION BY expression ORDER BY expression)] | 生成其分区内每行的行号(不带间隔)。OVER是可选参数,PARTITION BY 表示如何将查询结果划分分区,如果省略,则将所有查询结果视为一个分区;ORDER BY 表示如何将每个分区的查询结果排序,如果省略,则每个分区的查询结果是无序的。 | 查询 sales 表,生成其分区内每行的行号。:SELECT year,country,product, ROW_NUMBER() OVER(PARTITION BY country ORDER BY year,product) AS row_number RANK() OVER(PARTITION BY country ORDER BY year,product) AS rank DENSE_RANK() OVER(PARTITION BY country ORDER BY year,product) AS dense_rank FROM sales; |
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。