1. 程式人生 > 其它 >12.MYSQL基礎-常見函式

12.MYSQL基礎-常見函式

4. 常見函式

一、字元函式

  1. 概念

    • 類似於Java的方法,將一組邏輯語句封裝在方法中,對外暴露方法名
  2. 優點

    • 隱藏了實現細節
    • 提高程式碼的重用性
  3. 呼叫

    • select 函式名(實參列表) 【 from 表】;
  4. 特點

    • 叫什麼(函式名)
    • 幹什麼(函式功能)
  5. 分類

    • 單行函式(如 concat、length、ifnull)
    • 分組函式(功能:做統計使用,又稱為統計函式、聚合函式、組函式)
  6. concat拼接字串【utf8中漢字佔三個字元】

    • select concat (last_name,’-‘,first_name) as 姓名 from student;
  7. upper、lower大小寫

    • select upper(‘tom’);

    • select lower(‘tom’);

    • 例項:將姓變大寫,名變小寫,然後拼接

      select concat(upper(last_name),’-’,lower(first_name)) as 姓名 from student;

  8. 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;

  9. instr 返回字串第一次出現的索引

    • SELECT INSTR(‘iPhone13ProMax’,‘iPhone’) AS output 結果:1
  10. trim【除去欄位兩邊內容預設去除空格】

    • SELECT TRIM(‘ 何浩祥 ’) AS out_put結果:何浩祥
    • SELECT TRIM (‘aa’ from ‘aaaaa何aaa浩祥aaaa’) AS out_put
      結果:何aaa浩祥
  11. LPAD用指定的字元實現左填充指定長度

    • SELECT LPAD (‘何浩祥’,10,’6’) AS out_put; 結果:6666666何浩祥
  12. RPAD用指定的字元實現右填充指定長度

    • SELECT RPAD (‘何浩祥’,10,’!’) AS out_put; 結果:何浩祥!!!!!!!
  13. replace 替換

    • SELECT REPLACE(‘何浩祥牛逼何浩祥牛逼’,’牛逼’,’厲害’) AS HHXNB;

二、數字函式

  1. round四捨五入

    • SELECT ROUND(1.56) 2
    • SELECT ROUND(1.527,2) 1.53
  2. ceil 向上取整,返回>=該引數的最小整數

    • SELECT CEIL(1.001) 2
  3. floor 向下取整,返回<=該引數的最大整數

    • SELECT FLOOR(-9.99) -10
  4. truncate 【截斷】

    • SELECT TRUNCATE(1.6999,1) 1
  5. mod 取餘

    • mod(a,b): a-a/b*b
    • SELECT MOD(10,3); 1

三、日期函式

  1. SELECT NOW(); 返回系統當前日期

  2. SELECT CURDATE(); 返回當前系統日期,不包含時間

  3. SELECT CURTIME(); 返回當前時間不包含日期

  4. 指定部分,年、月、日、時分秒

    • SELECT YEAR(‘2000-11-13’) AS 年;
    • SELECT MONTH(NOW()) AS 月;
    • SELECT MONTHNAME(NOW()) AS 月; 月份的英文
  5. 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);

  6. DATE_FORMAT 將日期轉換為字元

    • SELECT DATE_FORMAT(NOW(),’%y年%m月%d日’) AS out_put;
  7. DATEDIFF,兩個時間相差的天數

    SELECT DATEDIFF(NOW(),’2000-11-13’);

四、 其他函式

  • SELECT VERSION (); 版本號

  • SELECT DATABASE(); 當前資料庫

  • SELECT USER(); 當前使用者

五、流程控制函式

  1. if 函式:if else的效果

    • SELECT IF(10>5,’大’,’小’);

    • 查詢學生資訊,是否獲得獎狀

      SELECT name,awards,IF(awards IS NULL ‘沒獎狀 呵呵’,’有獎狀哈哈 ’) AS 備註 FROM student;

  2. case函式的使用

    1. 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

    2. 多重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

六、分組函式

  1. 功能:用作統計使用,又稱為聚合函式或統計函式或者組函式

  2. 分類:sum求和、avg 平均值、max最大值、min最小值、count計算非空個數

  3. 簡單使用:

    • 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

  4. 特點

    • 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後的欄位