MySQL-常用函数:字符串函数、数学函数、时间日期转换函数、类型转换函数、条件函数
字符串函数
CONCAT(a,b,c,……)
解释:字符串 a,b,c 等多个字符串合并为一个字符串
例:
SELECT CONCAT("我", "爱", "吃", "西瓜", "!") AS interest; --输出 我爱吃西瓜
FORMAT(x,n)
解释:将数字 x 进行格式化 “.“, 将 x 保留到小数点后 n 位,最后一位四舍五入
例如:
SELECT FORMAT(3.1415926, 2); -- 输出 3.14
SUBSTR(s, start, length)
解释:从字符串 s 的 start 位置截取长度为 length 的子字符串
例如:
SELECT SUBSTR("helloMySQL", 1, 3) AS str; --输出 hel
REPLACE(s,s1,s2)
解释:将字符串 s2 替代字符串 s 中的字符串 s1
例如:
SELECT REPLACE('abc','a','v') ;--输出vbc
INSERT(s1,x,len,s2)
解释:字符串 s2 替换 s1 的 x 位置开始长度为 len 的字符串
例如:
SELECT INSERT("baidu.com", 1, 5, "71av"); -- 输出:71av.com
数学函数
ABS(m)
解释:返回 m 的绝对值
例如:
SELECT ABS(-5) -- 输出5
AVG(m)
解释:返回字段m在分组中的平均值
例如:
SELECT AVG(num) AS 销售额 FROM city_num ;
CEIL(m)
解释:返回大于或等于 m 的最小整数
例如:
SELECT CEIL(4.5) -- 输出 5
COUNT(m)
解释:返回查询的记录总数,expression 参数是一个字段或者 * 号
例如:
SELECT COUNT(student_ID) AS student FROM class; --统计班级中学生个数(学生id唯一)
若有重复id,可以使用关键字 distinct 去重:
例如:
SELECT COUNT(distinct student_ID) AS student FROM class;
另外统计全部记录数时,可以使用count(1)和count(*),两者区别:
执行效果上:
count(1)其实就是计算一共有多少符合条件的行,1并不是表示第一个字段,而是表示一个固定值。
其实就可以想成表中有这么一个字段,这个字段就是固定值1,count(1),就是计算一共有多少个1。count(*)执行时会把星号翻译成字段的具体名字,效果也是一样,不过多了一个翻译的动作,比固定值的方式效率稍微低一些。
执行效率上:
MySQL 会对count(*)做优化。
如果表中只有一列,则count(* )效率最优。
如果表有多列,且存在主键,效率为:count (主键列名)>count (1) >count( *)。
如果表有多列,且不存在主键,效率为:count(1 )>count( *)。
从执行结果来说:
count(1)和count ()之间没有区别,因为count () count (1)都不会去过滤。
(排除)空值,但count (列名)就有区别了,因为count (列名)会过滤空值。
POW(x,y)
解释:返回 x 的 y 次方
例如:
SELECT POW(2,4) --输出 16
MIN(m)、MAX(M)
解释:返回m列的最大值最小值 m=[2,4,5,6,7,8,9,0]
例如:
SELECT MAX(M),MIN(M) --输出 9,0
MySQL 日期函数
ADDDATE(d,n)
解释:计算起始日期 d 加上 n 天的日期
例如:
SELECT ADDDATE("2022-12-20", INTERVAL 10 DAY); --输出2022-12-30
ADDTIME(t,n)
解释:n 是一个时间表达式,时间 t 加上时间表达式 n n类型:hh:mi:ss
例如:
SELECT ADDTIME('2022-12-30 12:21:11', 5); --增加5秒 输出: 2022-12-30 12:21:16
SELECT ADDTIME('2022-12-30 12:21:11', 6:15); --增加6分15秒 输出: 2022-12-30 12:27:30
SELECT ADDTIME('2022-12-30 12:21:11', 1:6:15); --增加1小时6分15秒 输出: 2022-12-30 13:27:30
CURDATE()、CURRENT_DATE()
解释:返回当前日期
CURRENT_TIME、CURTIME()
解释:返回当前时间
CURRENT_TIMESTAMP()
解释:返回当前日期和时间
DATE()
解释:从日期或日期时间表达式中提取日期值
例如:
SELECT DATE("2022-12-30"); --输出 2022-12-30
DATEDIFF(d1,d2)
解释:计算日期 d1->d2 之间相隔的天数
例如:
SELECT DATEDIFF('2022-12-20','2022-12-30') --输出10
DATE_ADD(d,INTERVAL expr type)
解释:
计算起始日期 d 加上一个时间段后的日期,type 值可以是:MICROSECOND、SECOND、MINUTE、HOUR、DAY、WEEK、MONTH、QUARTER、YEAR。。。。。。
例如:
SELECT DATE_ADD(" 2022-12-20", INTERVAL 10 DAY);
-> 2022-12-30
SELECT DATE_ADD(" 2022-12-30 09:34:21", INTERVAL 15 MINUTE);
-> 2022-12-30 09:49:21
SELECT DATE_ADD(" 2022-12-30 09:34:21", INTERVAL -3 HOUR);
-> 2022-12-30 06:34:21
SELECT DATE_ADD(" 2022-12-30 09:34:21", INTERVAL -3 MONTH);
-> 2022-9-30
DATE_FORMAT(d,f)
解释:按表达式 f的要求显示日期 d
例如:
SELECT DATE_FORMAT('2022-12-30 11:11:11','%Y-%m-%d %r')
-> 2022-12-30 11:11:11 AM
DAY(d)
解释:返回日期值 d 的日期部分
例如:
SELECT DAY("2022-12-30"); --输出 30
DAYNAME(d)、DAYOFWEEK(d)
解释:DAYNAME返回日期 d 是星期几,如 Monday,Tuesday;DAYOFWEEK返回星期几,如,1,2
例如:
SELECT DAYNAME('2022-12-26 11:11:11') --输出 Monday
DAYOFMONTH(d)
解释:计算日期 d 是本月的第几天
例如:
SELECT DAYOFMONTH('2022-12-26 11:11:11') --输出 26
STR_TO_DATE(string, format_mask)
解释:将字符串转变为日期
例如:
SELECT STR_TO_DATE("August 10 2022", "%M %d %Y"); --输出 20222-08-10
类型转换函数
CAST(x AS type)
解释:转换数据类型
例如:
SELECT CAST("2022-12-29" AS DATE) ; SELECT CAST("123" AS bigint);
条件函数
CASE WHEN condition1 THEN result1
WHEN condition2 THEN result2
...
WHEN conditionN THEN resultN
ELSE result
END
解释:判断条件1是否满足,满足输出结果1,判断条件2是否满足,满足输出结果2,……否则,输出结果result
例如:
SELECT case when name_id = 1 then '张无忌'
when name_id = 2 then '郭靖'
when name_id = 3 then '杨过'
else '小龙女'
```;
### COALESCE(e1, e2, ...., e_n)
解释:返回参数中的第一个非空表达式(从左向右)
例如:
```sql
SELECT COALESCE(NULL, NULL, 'run', NULL, 'goo');--输出 run
NULLIF(e1, e2)
解释:比较两个字符串,如果字符串 e1 与 e2 相等 返回 NULL,否则返回 e1
例如:
SELECT NULLIF('你好', '你好');
IF(e,v1,v2)
解释:如果表达式 e 成立,返回结果 v1;否则,返回结果 v2。
例如:
SELECT IF(1 > 0,'正确','错误')
IFNULL(v1,v2)
解释:如果 v1 的值不为 NULL,则返回 v1,否则返回 v2。
例如:
SELECT IFNULL(null,'Hello Word')