1. 程式人生 > 實用技巧 >MySQL學習筆記-函式

MySQL學習筆記-函式

目錄

函式

  1. 字元函式
  2. 數學函式
  3. 日期函式
  4. 流程控制函式

函式

分類:

  • 分組函式:將一組值進行統計,得出一個值。
  • 單行函式:將一個值進行處理,得出一個值。
    呼叫語句:
select 函式名(實參列表);

分組函式:
分組函式這一塊在我的另一篇文章MySQL學習筆記-查詢中講解過,這裡不做贅述,有興趣的同學可以過去看一下。

單行函式:

1. 字元函式

常用字元函式:

  • length:獲取位元組長度
    SELECT LENGTH('abc張三');
    
  • concat:拼接字串
  • upper:將小寫字元轉換成大寫
  • lower:將大寫字元轉換成小寫
    SELECT UPPER('ABC'); 
    SELECT LOWER('ABC');
    
    #案例:將姓轉大寫,名轉小寫,然後拼接
    SELECT CONCAT(UPPER(last_name),' ',LOWER(first_name)) 姓名
    FROM employees;
    
  • instr:獲取字串第一次出現的索引,索引從1開始,若找不到則返回0
    SELECT INSTR('張三丰愛上了三豐的郭襄','楊過');
    
  • substr:擷取一段字串
    SELECT SUBSTR('郭襄愛上了楊過',6);
    SELECT SUBSTR('郭襄愛上了楊過',1,2);
    
  • lpad:左填充
    SELECT LPAD('尹志平愛上了',5,'*');
    
  • rpad:右填充
  • trim:去除前後空格或特殊字元
    SELECT LENGTH(TRIM('         小 龍 女                    ')) 美女;
    SELECT TRIM('a' FROM 'aaaaaaaqqqqqq小qq龍q女qqqqqqqqqqqqqq') 美女;
    

2. 數學函式

常用的數學函式:

  • ceil:
    #向上取整,返回>=該引數的最小整數
    SELECT CEIL(-1.0);
    
  • floor:
    #向下取整,返回<=該引數的最大整數
    SELECT FLOOR(-1.0);
    
  • round:
    #四捨五入,先按絕對值四捨五入,然後加正負號
    SELECT ROUND(-1.56);
    SELECT ROUND(1.537,1);
    
  • rand:
    #隨機數,返回0-1之間的小數,不包含1
    SELECT RAND();
    
    #返回50-100  a——b   floor(rand()*(b-a+1)+a)
    SELECT CEIL(RAND()*50+50);
    SELECT FLOOR(RAND()*51+50);
    
  • truncate:
    #截斷
    #返回1.9
    SELECT TRUNCATE(1.99,1);
    #返回314
    SELECT TRUNCATE(314.15,0);
    #返回310
    SELECT TRUNCATE(314.15,-1);
    

3. 日期函式

常用的日期函式:

  • now
    #獲取當前日期
    SELECT NOW();
    
  • curdate
    #獲取時間,沒有日期
    SELECT CURTIME();
    
  • year
  • month
  • monthname
  • day
    #獲取日期的指定部分
    SELECT YEAR(NOW());
    SELECT MONTH(NOW());
    SELECT MONTHNAME(NOW());
    SELECT DAY(NOW());
    
    SELECT CONCAT(YEAR(NOW()),'年',MONTH(NOW()),'月',DAY(NOW()),'日') 日期;
    
  • datediff
    #判斷兩個日期的差別天數,前者比後者大,返回正數,小返回負數,相等返回0.
    SELECT DATEDIFF(NOW(),'2022-8-8');
    SELECT DATEDIFF('2017-9-25',NOW());
    

4. 流程控制函式

常用的流程控制函式:

  • if ...
    SELECT IF(100>9,'不錯呦','不夠大') 備註;
    
  • case when ...
    #語法:
    #CASE 
    #WHEN 條件1 THEN 顯示的值1
    #WHEN 條件2 THEN 顯示的值2
    #...
    #ELSE 顯示的值n
    #END
    
    #類似於:
    #IF(條件1){
    #	語句1;
    #}ELSE IF(條件2){
    #}ELSE{
    #
    #}
    #案例:
    SELECT salary,
    CASE 
    WHEN salary>20000 THEN '購買汽車'
    WHEN salary>10000 THEN '購買手機'
    WHEN salary>5000 THEN '購買pad'
    ELSE '購買棒棒糖'
    END 購買資格
    FROM employees;
    
  • case ... when ...
    #語法: 
    #
    #CASE 欄位或表示式
    #WHEN 值1 THEN 顯示的值1
    #WHEN 值2 THEN 顯示的值2
    #...
    #ELSE 顯示的值n
    #END
    #
    #類似於:
    #switch(變數或表示式){
    #
    #	CASE 值1 :語句1;break;
    #	...
    #	DEFAULT:語句n;break;
    #
    #}
    #案例:查詢部門和對應的級別
    SELECT department_id,
    CASE department_id
    WHEN 10 THEN 'A'
    WHEN 20 THEN 'B'
    WHEN 30 THEN 'C'
    WHEN 50 THEN 'D'
    END 級別
    FROM employees;