单行函数:
- 字符串拼接:CONCAT('a','b','c')
- 字符串截取:SUBSTR('abc',1,2)//从第一位开始,截取abc长度为2。结果为ab
- 获取 字符串长度:LENGTH('abc')
- 数字四舍五入:ROUND(3.1415,3)//结果为3.142
- 数字截断:TRUNC(3.1415,3)//结果为3.141
- 判断是否为null:IFNULL(ex,em)//判断ex是否为null,如果是null,则用em来代替
- 返回第一个非空值:COALESCE(字段1,0)//如果字段1为null,就取0
- 流程控制(类似三元表达式):if(a>b,'a','b')
- case when:case(字段) when 值1 then 显示的值1 when 值2 then 显示的值2 else 显示的值3 end //应用:计算某状态下人数
count( CASE WHEN ( student_exam_state = 0 ) THEN student_exam_state END ) AS countUnlisted
- 时间:
- DATE_ADD(now(),INTERVAL 30 MINUTE)//在当前时间(第一个参数)基础上加30(第二个参数)分钟(第三个参数)
- DATE_sub(now(),INTERVAL 1 HOUR)//当前时间基础上减1小时
- DATEDIFF('2020-5-31 20:12:04','2020-5-29 20:10:18')//返回两个时间相差天数
- TIMEDIFF('2020-5-31 20:12:04','2020-5-29 20:02:18')//返回两个时间相差时分秒
多行函数//一般配合group by使用
- count(*)//求条数,性能上count(*)>count(1)>count(主键id)>count(字段)
- sum()//求和
- max()//求最大值
- min()//求最小值
- avg()//求平均值
- 两列拼接:GROUP_CONCAT(字段1) group by 字段2
- 行转列:利用多行函数sum()或max()
SELECT user_name ,
SUM(CASE course WHEN '数学' THEN score ELSE 0 END ) 数学,
MAX(CASE course WHEN '语文' THEN score ELSE 0 END ) 语文,
MAX(CASE course WHEN '英语' THEN score ELSE 0 END ) 英语
FROM test_tb_grade
GROUP BY USER_NAME;
这些函数都不用背,知道有这么函数能用,实际开发需要的时候再查就好了,毕竟记是记不住的。