mysql語句中的常見函式
阿新 • • 發佈:2020-12-23
函式:類似於java中學過的”方法”,為了解決某個問題,將編寫的一系列的命令集合封裝在一起,對外僅僅暴露方法名,供外部呼叫。
分為兩個層面:
1.自定義方法(函式)
2.呼叫方法(函式)
叫什麼:函式名
幹什麼:函式功能
字元函式
#一. 字元函式 #1. CONCAT 拼接字元 SELECT CONCAT('HELLO',`first_name`,`last_name`) 備註 FROM `employees`; #2. length 獲取位元組長度:文字佔3個位元組 SELECT LENGTH('hello,狗狗');#12 #3. char_LENGTH 獲取字元個數:一個字元佔一個位元組 SELECT CHAR_LENGTH('hello,狗狗');#8 #4. substring/substr 擷取子串 /* 注:sql中起始索引是1 形式1:substr(str,起始索引,擷取的字元長度) 形式2:substr(str,起始索引) 長度不寫,預設都截 */ SELECT SUBSTR('小胡愛上了小王',2,3); #5. INSTR 獲取字元第一次出現的索引 SELECT INSTR('小胡愛上了小王','愛');#3 #6. trim 去前後空格/前後字元 預設去空格 SELECT TRIM(' 小胡 小王 ') a; SELECT TRIM('x' FROM 'xxx小胡xx小王xxxx') a; #7. lpad/rpad 左填充/右填充 填充至指定長度 SELECT LPAD('小胡小王',10,'a');#aaaaaa小胡小王 SELECT RPAD('小胡小王',10,'a');#小胡小王aaaaaa #8. UPPER/LOWER 變大寫/變小寫 #姓名首字母大寫 SELECT UPPER(SUBSTR(`first_name`,1,1)),`first_name` FROM `employees`; #9. STRCMP 比較兩個字元大小 SELECT STRCMP('abc','aaa');#前面大,輸出1 #10. left/right 從左/右擷取子串 SELECT LEFT('小狗勾',1);#小 SELECT RIGHT('小狗勾',1);#勾
數學函式
#二. 數學函式 #1. abs 絕對值 SELECT ABS(-2.4); #2、CEIL 向上取整 返回>=該引數的最小整數 SELECT CEIL(-1.09);#-1 SELECT CEIL(0.09);#1 SELECT CEIL(1.00);#1 #3、FLOOR 向下取整,返回<=該引數的最大整數 SELECT FLOOR(-1.09);#-2 SELECT FLOOR(0.09);#0 SELECT FLOOR(1.00);#1 #4、ROUND 四捨五入 第二個引數表示保留位數 SELECT ROUND(1.8712345);#2 SELECT ROUND(1.8712345,2);#1.87 #5、TRUNCATE 截斷 第二個引數表示保留位數 SELECT TRUNCATE(1.8712345,1);#1.8 #6、MOD 取餘 SELECT MOD(-10,3);#-1 #被除數的正負決定了結果的正負 SELECT -10%3;#-1 SELECT 10%3;#1 SELECT -10%-3;#-1 SELECT 10%-3;#1
日期函式
#三、日期函式 #1、NOW 當前日期和時間 SELECT NOW(); #2、CURDATE 當前日期 SELECT CURDATE(); #3、CURTIME 當前時間 SELECT CURTIME(); #4、DATEDIFF 求兩個日期天數的差 SELECT DATEDIFF('1998-7-16','2019-7-13'); #5、DATE_FORMAT 將日期轉化為指定形式 SELECT DATE_FORMAT('1998-7-16','%Y年%m月%d日 %H小時%i分鐘%s秒') 出生日期; SELECT DATE_FORMAT(hiredate,'%Y年%M月%d日 %H小時%i分鐘%s秒') 入職日期 FROM employees; #6、STR_TO_DATE 按指定格式解析字串為日期型別 SELECT * FROM employees WHERE hiredate<STR_TO_DATE('3/15 1998','%m/%d %Y');
流程控制函式
#四、流程控制函式
#1、IF函式:若表示式1成立,結果為表示式2,若不成立,結果為表示式3
SELECT IF(100>9,'好','壞');
#需求:如果有獎金,則顯示最終獎金,如果沒有,則顯示0
SELECT IF(commission_pct IS NULL,0,salary*12*commission_pct) 獎金,
commission_pct
FROM employees;
#2、CASE函式
/*
情況1 :類似於switch語句,可以實現等值判斷
CASE 表示式
WHEN 值1 THEN 結果1
WHEN 值2 THEN 結果2
...
ELSE 結果n
END
案例:
部門編號是30,工資顯示為2倍
部門編號是50,工資顯示為3倍
部門編號是60,工資顯示為4倍
否則不變
顯示 部門編號,新工資,舊工資
*/
SELECT department_id,salary,
CASE department_id
WHEN 30 THEN salary*2
WHEN 50 THEN salary*3
WHEN 60 THEN salary*4
ELSE salary
END AS newSalary
FROM employees;
/*
情況2:類似於多重IF語句,實現區間判斷
CASE
WHEN 條件1 THEN 結果1
WHEN 條件2 THEN 結果2
...
ELSE 結果n
END
案例:如果工資>20000,顯示級別A
工資>15000,顯示級別B
工資>10000,顯示級別C
否則,顯示D
*/
SELECT salary,
CASE
WHEN salary>20000 THEN 'A'
WHEN salary>15000 THEN 'B'
WHEN salary>10000 THEN 'C'
ELSE 'D'
END
AS 級別
FROM employees;