最近闲来无事整理了一下MySQL中的常用函数
聚合函数
Max():用于取得列或者表达式的最大值,适用于任务数据类型
Min():用于取得列或者表达式的最小值,适用于任务数据类型
Avg():用于取得列或者表达式的平均值,适用于数字类型
Sum():用于取得或者表达式的总和,使用于数字类型
Count():用户取得行数得总和
FIRST():返回指定的字段中第一个记录的值。
group_concat:将字符串从分组中连接成具有各种选项(如distinct,order by)的字符串
字符函数
concat():将二个或多个字符串组合成一个字符串
select CONCAT(列名1,列名2) from 表名;
select CONCAT(列名1,'-' ,列名2,'-',列名3) from 表名; -- 列名之间用 - 拼接
concat_ws(): 第一个参数指定分隔符
select CONCAT_WS(分隔符,列名1,列名2,列名3) from 表名;
select CONCAT_WS('-',列名1,列名2) from 表名; -- 列名之间用 - 拼接(concat升级版)
Instr():返回子字符串在字符串中第一次出现的位置
left():从第一个字符开始返回指定个数的字符
select id,title,LEFT(content,20) content from 表名
length()/char_length():以字节和字符获取字符串的长度(常用char_length)
select id,title if(CHAR_LENGTH(content) > 20,CONCAT(LEFT(content,20),'..........'),content) content from 表名
reverse():字符反转
select REVERSE(content) content from 表名
replace():搜索并替换字符串中的子字符串
REPLACE(str列,old_string,new_string)
update 表名 set name = REPLACE(name,'xpc','mysql');
REPEAT(str, count) 将字符串 str 重复 count 次,并返回重复后的结果:
SELECT REPEAT('MySQL', 2); -- MySQLMySQL
substring():从具有特定长度的位置开始提取子字符串
select substring(列名,6,截取个数) from 表名
trim()/LTRIM/RTRIM:从字符串中删除不需要的字符
select TRIM(both from 列名) from 表名 -- 删除前后空格
select TRIM(leading from 列名) from 表名 -- 删除前面空格
select TRIM(trailing from 列名) from 表名 -- 删除后面空格
find_in_set():在逗号分割的字符串列表中找到一个字符串(返回其在第几个位置)
select FIND_IN_SET('t','i,t,p,u,x'); -- 2
LOWER(s)/LCASE(s):将字符串s中所有的字符都转为小写
select LOWER(列名) from 表名
UPPER(s)/UCASE(s):将字符串s中所有的字符都转为大写
select UPPER(列名) from 表名
format(要进行格式化的数值,小数点后保留的位数):格式化有特定区域设置的数字,摄舍入到小数位数
SELECT FORMAT(12332.123456, 4); -- 12332.1235
LPAD(str1, n, str2) 在字符串 str1 的左边使用字符串 str2 进行填充,直到总长度达到 n 为止
SELECT LPAD('MySQL', 8, '*'); -- ***MySQL
时间日期函数
CURDATE() 返回当前日期:
SELECT CURDATE(); -- 2022-05-07
CURTIME() 返回当前时间:
SELECT CURTIME(); -- 21:54:20
DATEDIFF(date1, date2) 返回 date1 与 date2 间隔的天数:
SELECT DATEDIFF('2020-07-01', '2020-06-01'); -- 30 如果 date1 日期比 date2 日期小,输出为负值。
timediff():计算二个时间的差值
select TIMEDIFF('2017-12-31 23:34:32','2017-12-31 23:34:56');
DATE_ADD(date, n) 返回 date 日期添加 n 天后的新日期
SELECT ADDDATE('2020-07-01', 10);
select DATE_ADD('2017-12-31 23:34:32'.interval 1 second); -- 加1秒
select DATE_ADD('2017-12-31 23:34:32'.interval 1 day); -- 加1天
select DATE_ADD('2017-12-31 23:34:32'.interval 1 year); -- 加1年,还有 month,week,hour
date_sub():从日期值中减去时间值
select DATE_SUB('2017-12-31 23:34:32'.interval 1 second); -- 减1秒
select DATE_SUB('2017-12-31 23:34:32'.interval 1 day); -- 减1天
select DATE_SUB('2017-12-31 23:34:32'.interval 1 year); -- 减1年,还有 month,week,hour
date_format():根据指定的日期格式格式化日期值
SELECT DATE_FORMAT(NOW(), '%W');-- Saturday 可以使用 %a 代替 %W ,那么输出结果则为 Sat ,英文单词的简写,也可以使用 %w 替换 %W ,输出结果为 6 ,即星期几的数值
SELECT DATE_FORMAT(NOW(), '%Y-%c'); -- 2022-5 年份只显示后两位,则上面例子可以使用 %y 代替 %Y ,输出结果为 21-3
SELECT DATE_FORMAT(CURTIME(), '%i:%S');-- 55:47 显示当前时间的分钟数和秒数,分和秒之间用 : 连接。
dayname():获取指定日期的工作日的名称,也就是返回今天是星期几
select DAYNAME('2018-01-01') -- 返回英文
dayofweek():返回日期的工作日索引
select DAYOFWEEK('2018-01-01'); 返回的是一个索引值,1-7代表周日-周六
extract():提取日期的一部分
seelct EXTRACT(day from '2018-04-23 15:23:53');
seelct EXTRACT(month from '2018-04-23 15:23:53');
seelct EXTRACT(hour from '2018-04-23 15:23:53');
NOW() 返回当前日期时间:
SELECT NOW(); -- 2022-05-07 21:53:41
month():返回一个表示指定日期的月份的整数
select MONTH('2018-04-23');
str_to_date():将字符串转换为基于指定格式的日期和时间值
SELECT STR_TO_DATE('2020070a', '%Y%m%d');-- 待转换字符串中只能出现数字,否则返回结果为 NULL
SELECT STR_TO_DATE('202007', '%Y%m%d'); -- 如果格式字符串仅包含日期,则待转字符串至少需要 8 位数字 否则返回 NULL(如果被转字符串超出 8 位且格式字符串中无时间格式,则自动取前 8 位转换为日期)
SELECT STR_TO_DATE('20201301', '%Y%m%d');-- 转换后日期时间必须有效,否则返回结果为 NULL(20201301 转换为日期后得到的月份是 13,超出有效范围,故结果返回 NULL)
SELECT STR_TO_DATE('20200701104523', '%Y%m%d%H%i%S'); -- 2020-07-01 10:45:23
sysdata():返回当前日期
select SYSDATE();
select SYSDATE(2);
WEEK(date) 返回 date 日期是一年中的第几周
SELECT WEEK('2020-07-01'); -- 26
YEAR(date)、MONTH(date)、DAY(date) 返回 date 日期中的年份、月份、日:
SELECT YEAR('2020-07-01'), MONTH('2020-07-01'), DAY('2020-07-01'); -- 2020 | 7 | 1
数值函数
ROUND(num, n) 返回 num 的四舍五入的 n 位小数的值
SELECT ROUND(5.1364, 2); -- 5.14
SELECT ROUND(列名,小数位数) FROM 表名
ABS(num) 返回 num 的绝对值
SELECT ABS(-5); -- 5
CEIL(number) 向上取整
select ceil(12.2) -- 13
select ceil(12.7) -- 13
FLOOR(number) 向下取整
select ceil(12.2) -- 12
select ceil(12.7) -- 12
MOD(num1, num2) 返回 num1 对 num2 进行模运算结果:
SELECT MOD(6, 4); -- 2
RAND() 返回 0 到 1 内的随机值
TRUNCATE(num, n) 返回数字 num 截断为 n 位小数的结果
SELECT TRUNCATE(5.1364, 2); -- 5.13
SQRT(num) 返回 num 的平方根:
SELECT SQRT(16); -- 4