12.MYSQL基礎-常見函式
4. 常見函式
一、字元函式
-
概念
- 類似於Java的方法,將一組邏輯語句封裝在方法中,對外暴露方法名
-
優點
- 隱藏了實現細節
- 提高程式碼的重用性
-
呼叫
- select 函式名(實參列表) 【 from 表】;
-
特點
- 叫什麼(函式名)
- 幹什麼(函式功能)
-
分類
- 單行函式(如 concat、length、ifnull)
- 分組函式(功能:做統計使用,又稱為統計函式、聚合函式、組函式)
-
concat拼接字串【utf8中漢字佔三個字元】
- select concat (last_name,’-‘,first_name) as 姓名 from student;
-
upper、lower大小寫
-
select upper(‘tom’);
-
select lower(‘tom’);
-
例項:將姓變大寫,名變小寫,然後拼接
select concat(upper(last_name),’-’,lower(first_name)) as 姓名 from student;
-
-
substr、sbustring【索引從1開始】
-
擷取從指定索引處後方所有字元
SELECT SUBSTR(‘iPhone13ProMax’,7) AS output (13ProMax)
-
擷取從指定索引處指定字元長度的字元
SELECT SUBSTR(‘iPhone13ProMax’,7,2) AS output (13)
-
姓名中首字元大寫,其他字元小寫,然後用_拼接,顯示出來
SELECT CONCAT(UPPER(SUBSTR(last_name,1,1)),’-’,LOWER(SUBSTR(last_name,2))) AS output from student;
-
-
instr 返回字串第一次出現的索引
- SELECT INSTR(‘iPhone13ProMax’,‘iPhone’) AS output 結果:1
-
trim【除去欄位兩邊內容預設去除空格】
- SELECT TRIM(‘ 何浩祥 ’) AS out_put結果:何浩祥
-
SELECT TRIM (‘aa’ from ‘aaaaa何aaa浩祥aaaa’) AS out_put
-
LPAD用指定的字元實現左填充指定長度
- SELECT LPAD (‘何浩祥’,10,’6’) AS out_put; 結果:6666666何浩祥
-
RPAD用指定的字元實現右填充指定長度
- SELECT RPAD (‘何浩祥’,10,’!’) AS out_put; 結果:何浩祥!!!!!!!
-
replace 替換
- SELECT REPLACE(‘何浩祥牛逼何浩祥牛逼’,’牛逼’,’厲害’) AS HHXNB;
二、數字函式
-
round四捨五入
- SELECT ROUND(1.56) 2
- SELECT ROUND(1.527,2) 1.53
-
ceil 向上取整,返回>=該引數的最小整數
- SELECT CEIL(1.001) 2
-
floor 向下取整,返回<=該引數的最大整數
- SELECT FLOOR(-9.99) -10
-
truncate 【截斷】
- SELECT TRUNCATE(1.6999,1) 1
-
mod 取餘
- mod(a,b): a-a/b*b
- SELECT MOD(10,3); 1
三、日期函式
-
SELECT NOW(); 返回系統當前日期
-
SELECT CURDATE(); 返回當前系統日期,不包含時間
-
SELECT CURTIME(); 返回當前時間不包含日期
-
指定部分,年、月、日、時分秒
- SELECT YEAR(‘2000-11-13’) AS 年;
- SELECT MONTH(NOW()) AS 月;
- SELECT MONTHNAME(NOW()) AS 月; 月份的英文
-
STR_TO_DATE將字元通過指定格式轉換日期
-
查詢入學時間為2008-12-11的學生資訊
SELECT * FROM student WHERE inschool=‘2008-12-11’;
SELECT * FROM student WHERE inschool=STR_TO_DATE(‘12-11 2008’,’%c-%d %Y);
-
-
DATE_FORMAT 將日期轉換為字元
- SELECT DATE_FORMAT(NOW(),’%y年%m月%d日’) AS out_put;
-
DATEDIFF,兩個時間相差的天數
SELECT DATEDIFF(NOW(),’2000-11-13’);
四、 其他函式
-
SELECT VERSION (); 版本號
-
SELECT DATABASE(); 當前資料庫
-
SELECT USER(); 當前使用者
五、流程控制函式
-
if 函式:if else的效果
-
SELECT IF(10>5,’大’,’小’);
-
查詢學生資訊,是否獲得獎狀
SELECT name,awards,IF(awards IS NULL ‘沒獎狀 呵呵’,’有獎狀哈哈 ’) AS 備註 FROM student;
-
-
case函式的使用
-
switch case
-
case 要判斷的欄位或表示式
when 常量1 then 要顯示的值1或語句1
when 常量2 then 要顯示的值2或語句2
。。。
else 要顯示的值n或語句n
end
-
案例查詢學生的英語成績
一班的顯示成績為成績的1.3倍
二班的顯示成績為成績的1.2倍
三班的顯示成績為成績的1.1倍
其他班顯示原始成績
SELECT Englis AS 原始成績,class
case class
when ‘一班’ then English*1.3
when ‘二班’ then English*1.2
when ‘三班’ then English*1.1
else English
end as 附加成績
from student
-
-
多重if
-
case
when 條件1 then 要顯示的值1或者語句1
when 條件2 then 要顯示的值2或者語句2
。。。
else 要顯示的語句n
end
-
案例如果英語成績大於90,顯示級別為A
案例如果英語成績大於80,顯示級別為B
案例如果英語成績大於60,顯示級別為C
其他情況顯示D
SELECT English
case
when English>90 then ‘A’
when English>80 then ‘B’
when English>60 then ‘C’
ELSE ‘D’
END AS 成績級別
FROM student
-
-
六、分組函式
-
功能:用作統計使用,又稱為聚合函式或統計函式或者組函式
-
分類:sum求和、avg 平均值、max最大值、min最小值、count計算非空個數
-
簡單使用:
-
SELECT SUM(English) FROM student;
-
SELECT AVG(English) FROM student;
-
SELECT MAX(English) FROM student;
-
SELECT MIN(English) FROM student;
-
SELECT COUNT(English) FROM student;
-
SELECT SUM(English) 和,AVG(English) 平均值,MAX(English) 最大值,MIN(English) 最小值,COUNT(English) 個數
FROM student
-
SELECT SUM(English) 和,ROUND(AVG(English) ,2) 平均值,MAX(English) 最大值,MIN(English) 最小值,COUNT(English) 個數
FROM student
-
-
特點
-
sum、avg一般用於處理數值型,max、min可以處理任何資料型別
-
以上分組函式都忽略null值
-
可以和distinct搭配去實現去重
SELECT SUM(DISTINCT English),SUM(English) FROM student;
-
conut函式的詳細介紹
統計所有行數
SELECT COUNT(*) FROM student;
SELECT COUNT(1) FROM student;
-
和分組函式一同查詢的欄位要求是group by後的欄位
-