單行函數:
- 字符串拼接: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;
這些函數都不用背,知道有這麼函數能用,實際開發需要的時候再查就好了,畢竟記是記不住的。