首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 流程控制函數全解析:IF、CASE、IFNULL、NULLIF 實戰用法

     編輯:MySQL 資料庫相關知識

IF 函數:最基礎的三元判斷

IF(expr1, expr2, expr3)
-- expr1 為 TRUE(非 0 且非 NULL)返回 expr2,否則返回 expr3

經典案例:性別碼轉中文

SELECT id, name,
       IF(sex = 1, '男', '女') AS gender_cn
FROM users;

陷阱:隱式類型轉換

SELECT IF(0.1, 'true', 'false');  -- 返回 'false'!0.1 被轉為整數 0
SELECT IF(0.1 <> 0, 'true', 'false'); -- 返回 'true',正確比較浮點數

規則:expr1 作為整數計算;浮點/字符串務必用比較運算符。

CASE 表達式:多條件分支

簡單 CASE(值匹配)

CASE col
  WHEN 'A' THEN '優秀'
  WHEN 'B' THEN '良好'
  ELSE '需改進'
END AS grade

搜索 CASE(條件表達式)

CASE
  WHEN score >= 90 THEN 'A'
  WHEN score >= 80 THEN 'B'
  WHEN score >= 60 THEN 'C'
  ELSE 'D'
END AS level

實戰:動態排序

SELECT * FROM products
ORDER BY
  CASE @sort_type
    WHEN 'price_asc'  THEN price
    WHEN 'price_desc' THEN -price
    WHEN 'sales'      THEN -sales
    ELSE id
  END;

IFNULL / COALESCE:空值替換

IFNULL(expr1, expr2)      -- 兩參數,expr1 非 NULL 返回 expr1,否則 expr2
COALESCE(expr1, expr2, ...) -- 多參數,返回第一個非 NULL 值(標準 SQL)

避坑:類型推導

CREATE TABLE t AS SELECT IFNULL(1, 'test') AS col;
-- col 類型為 CHAR(4),以「更通用」類型為準:STRING > REAL > INTEGER

NULLIF:相等則為 NULL

NULLIF(expr1, expr2)  -- 等同 CASE WHEN expr1 = expr2 THEN NULL ELSE expr1 END

用例:防除零錯誤

SELECT 100 / NULLIF(total, 0) AS per_capita;  -- total=0 時返回 NULL 而非報錯

返回類型優先級速查

expr2 / expr3 類型組合結果類型
任一為字符串字符串(若任一區分大小寫,結果區分大小寫)
任一為浮點數浮點數
均為整數整數

最佳實踐建議

  1. 優先用 CASE 替代嵌套 IF,可讀性更強
  2. COALESCE 標準兼容性優於 IFNULL
  3. 數值判斷顯式比較(<> 0、IS NOT NULL)避免隱式轉換
  4. 字符串字面量加 N'' 或確保連接字符集一致,防亂碼
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved