MySQL(6) 之 單行函式
單行函式
概念: 類似java中的方法,將一組邏輯語句封裝到方法體中,對外暴露方法名
好處:1.隱藏實現細節;2、提高diam的重要性
分類:1.單行函式 concat、length、ifnull
2.分組函式 統計中使用,又稱統計函式,聚合函式,組函式;
1.單行函式
# 1.字元函式
# 1.1 length:一個字母是一個位元組,
# 如果一個漢字三個位元組(utf8)
# 如果是gbk的話漢字佔兩個位元組
SELECT LENGTH('張無敵');
# 1.2 concat 字元拼接函式
SELECT CONCAT(last_name,'-',first_name) FROM employees;
# 1.3 upper,lower 大小寫轉換;
SELECT UPPER('hello');
SELECT LOWER('HELLO');
# 1.4 substr
# 在mysql中索引是從1開始數的;
# 7是從7位置擷取;
SELECT SUBSTR('李莫愁愛上了陸展元',7) outname;
# 1是開始位置,3是擷取長度;
SELECT SUBSTR('李莫愁愛上了陸展元',1,3) outname;
# 1.5 instr (返回字串在長串中第一次起始索引,如果沒有返回0)
SELECT INSTR('楊不悔愛上了殷六俠','殷六俠') AS output;
# 1.6 trim(去除頭和尾)
SELECT TRIM(' asdfasdf ') AS output;
# 去掉字串頭尾的'-'
SELECT TRIM('-'FROM'--------HHHH-------') AS output;
# 1.7 lpad rpad(指定長度 指定字元 左右填充 )
# 如果長度小於原本字串的長度,會截斷字串;
SELECT LPAD('殷素素',10,'*') AS output;
# 1.8 replace 替換
SELECT REPLACE ('張 wudi','張','李');
#數學函式
# 1.round 四捨五入
SELECT ROUND (1.23);
# 小數點後保留兩位;
SELECT ROUND (1.234,2);
# 2. ceil 向上取整;2
SELECT CEIL(1.34);
# 3. floor 向下取整 -4
SELECT FLOOR(-3.45);
# 4.truncate 截斷 1.2
SELECT TRUNCATE (1.299,1);
# 5.mode 取餘數
SELECT MOD(10,3);
SELECT 10%3;
# 日期函式
# 1. 返回當前系統日期+時間;
SELECT NOW();
# 2. 返回當前系統日期;
SELECT CURDATE();
# 3. 返回當前系統時間;
SELECT CURTIME();
# 4.自定義日期 年,月,日,時,分 ,秒
SELECT YEAR(NOW()) 年 ,MONTH(NOW()) 月;
# 5.str_to_date() 將字串轉成日期型別
SELECT STR_TO_DATE('1998-8-4','%Y-%c-%d') AS riqi;
# 6. date_format 將日期轉換成字串
SELECT DATE_FORMAT(NOW(),"%y年/%m月/%d日");
SELECT last_name,DATE_FORMAT(hiredate,"%y年/%m月/%d日") FROM employees;
# 其他函式
SELECT VERSION();
SELECT DATABASE();
SELECT USER();
# 流程控制函式
# 1. if 函式, if else
SELECT IF(10<5,'da','xiao');
SELECT last_name,IF(commission_pct IS NULL,'hehe','haha') 備註 FROM employees;
# 2.case 函式的使用
SELECT
CASE department_id
WHEN 30 THEN salary*1.1
WHEN 40 THEN salary*1.2
WHEN 50 THEN salary*1.3
ELSE salary
END AS 新工資
FROM employees;
# 3.case 的使用二
/*
case (case 後面不加東西)
when 條件1 then ...
when 條件2 then ...
else ...
end
*/
SELECT
CASE
WHEN salary>10000 THEN 'c'
WHEN salary>15000 THEN 'b'
WHEN salary>20000 THEN 'a'
ELSE 'd'
END AS 工資級別
FROM employees;