天天看點

【page】mysql筆記(四)常用函數--單行函數進階4:常見函數

進階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;