不知道这些MySQL常用函数

48 阅读6分钟

最近闲来无事整理了一下MySQL中的常用函数

聚合函数

 Max():用于取得列或者表达式的最大值,适用于任务数据类型
 Min():用于取得列或者表达式的最小值,适用于任务数据类型
 Avg():用于取得列或者表达式的平均值,适用于数字类型
 Sum():用于取得或者表达式的总和,使用于数字类型
 Count():用户取得行数得总和
 FIRST():返回指定的字段中第一个记录的值。
 group_concat:将字符串从分组中连接成具有各种选项(如distinctorder 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() 返回 01 内的随机值
TRUNCATE(num, n) 返回数字 num 截断为 n 位小数的结果
	SELECT TRUNCATE(5.1364, 2); -- 5.13
SQRT(num) 返回 num 的平方根:
	SELECT SQRT(16); -- 4