進階4:常見函數
概念:類似于Java中的方法,将一組邏輯語句封裝在方法體内,對外暴露方法
好處:1、隐藏了實作細節 2、提高了代碼的重用性
調用:select 函數名(實參清單)
【from 表】;
特點:
1:叫什麼(函數名)
2:幹什麼(函數功能)
分類:
1:單行函數
如concat,length,ifnull
包括:字元函數,數學函數,日期函數,其他函數,流程控制函數
2:分組函數
(1)功能:做統計使用
常見函數:
一、單行函數
字元函數
length----擷取參數值的位元組個數
concat----拼接字元串
substr----截取字元
instr-----傳回子串第一次出現的索引,如果找不到,傳回0
trim
upper-----字元串大寫
lower-----字元串小寫
lpad------用指定字元實作左填充指定長度
rpad------用指定字元實作右填充指定長度
replace—替換
數學函數
round-----四舍五入,或保留幾位小數
ceil------向上取整
floor-----向下取整
truncate–截斷
mod-------取餘
日期函數
now
curdate—傳回目前系統日期,不包括時間
curtime—傳回目前系統時間,不包括日期
year
month
monthname–傳回英文的月份
day
hour
minute
second
str_to_date
date_format
其他函數
version
datebase
user
流程控制函數
if
case
一、字元函數
1.length 擷取參數值的位元組個數
SELECT LENGTH('joey');
SELECT LENGTH('張沛祺hahaha');
2.concat 拼接字元串
SELECT
CONCAT(`last_name`,' ',`first_name`) AS 姓名
FROM
employees;
3.upper,lower
SELECT UPPER('joey');
SELECT LOWER('ROSS');
執行個體:将姓變大寫,名變小寫,然後拼接
SELECT
CONCAT(LOWER(`first_name`),' ',UPPER(`last_name`)) AS 姓名
FROM
employees;
4.substr,substring【截取字元】
注意:mysql中索引從1開始
截取從指定索引處後面的所有字元[>=4]
截取從指定索引處指定字元長度的字元[>=1&&<=3]
案例:将名的首字元大寫,其他字元小寫,然後用_拼接
SELECT
CONCAT(UPPER(SUBSTRING(last_name,1,1)),'_',LOWER(SUBSTR(last_name,2))) AS out_put
FROM
employees;
5.instr
傳回子串第一次出現的索引,如果找不到,傳回0
SELECT
INSTR('楊不悔愛上了殷六俠','殷六俠') AS out_put
FROM
employees;
6.trim
SELECT
TRIM(' 張翠山 ') AS out_put;
#--------------------------------------
SELECT
TRIM('aa' FROM 'aaaaaaa張翠山aaaa') AS out_put;
7.lpad,rpad
#用指定字元實作左填充指定長度
SELECT
LPAD('張',5,'*') AS out_put;
#用指定字元實作右填充指定長度
SELECT
RPAD('張',10,'*') AS out_put;
8.replace 替換
二、數學函數
1.round—四舍五入
SELECT ROUND(1.2);
SELECT ROUND(1.65,1);#第二個參數是保留幾位小數
2.ceil—向上取整
傳回>=該參數的最大整數
3.floor—向下取整
4.truncate–截斷
5.mod—取餘
三、日期函數
1.now :傳回目前的日期+時間
2.curdate :傳回目前系統日期,不包括時間
3.curtime :傳回目前系統時間,不包含日期
4.可以擷取指定的部分,年、月、日、小時、分鐘、秒
SELECT YEAR('2018-9-12');
SELECT MONTHNAME(NOW()) AS 年;#英文月份
SELECT YEAR(`hiredate`) AS 年 FROM employees;
5.str_to_date :将合法日期格式的字元轉換成指定格式的日期
6.date_format:将日期轉換成字元
四、其他函數
1.檢視目前版本
2.檢視目前資料庫
3.檢視使用者
五、流程控制函數
1.if函數:Java中的if else的效果
SELECT IF(10>5,'da','xiao') AS if函數;
#-----------------------------------------
SELECT
IF(`commission_pct`IS NULL,'沒獎金,呵呵','有獎金,嘿嘿') AS 備注
FROM
employees;
2.case函數的使用一:Java中的switch case的效果
Java中
switch(變量或表達式){
case 常量:語句1;break;
…
default:語句n;break;
}
MySQL中
case 要判斷的字段或表達式
when 常量1 then 要顯示的值1或(語句1;)
when 常量2 then 要顯示的值2或(語句2;)
when 常量3 then 要顯示的值3或(語句3;)
…
else 要顯示的值n或(語句n;)
end
SELECT
salary AS 源工資,department_id,
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;
case的使用二:類似于Java中的 多重if
Java中:
if(條件){
語句1;
}else if(條件2){
語句2;
}else{
語句n;
}
MySQL中:
case
when 條件1 then 要顯示的值1或(語句1;)
when 條件2 then 要顯示的值2或(語句2;)
when 條件3 then 要顯示的值1或(語句3;)
…
else 要顯示的值n或(語句n;)
end
SELECT
CASE
WHEN salary>20000 THEN 'A'
WHEN salary>15000 THEN 'B'
WHEN salary>10000 THEN 'C'
ELSE 'D'
END AS 工資級别
FROM
employees;