首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 流程控制函數全解:IFNULL、IF、CASE 表達式語法與避坑指南

     編輯:MySQL 綜合教學

IFNULL(expr1, expr2)

expr1 不為 NULL 回傳 expr1,否則回傳 expr2。回傳型別取決於上下文(數值/字串)。

SELECT IFNULL(1,0);        -- 1
SELECT IFNULL(NULL,10);    -- 10
SELECT IFNULL(1/0,10);     -- 10 (除零產生 NULL)
SELECT IFNULL(1/0,'yes');  -- 'yes'

IF(expr1, expr2, expr3)

expr1 為 TRUE(非 0 且非 NULL)回傳 expr2,否則 expr3。

SELECT IF(1>2, 2, 3);                    -- 3
SELECT IF(1<2, 'yes', 'no');             -- 'yes'
SELECT IF(STRCMP('test','test1'),'yes','no'); -- 'no'

浮點數陷阱

SELECT IF(0.1, 1, 0);      -- 0  (0.1 隱含轉整數 0 → FALSE)
SELECT IF(0.1 <> 0, 1, 0); -- 1  (比較運算保留浮點數語義)

教訓:IF() 的第一參數以整數語境評估,浮點/字串條件必須用比較運算式(<>0、IS NOT NULL、= 'val')轉為布林。

CASE 表達式(兩種形式)

簡單 CASE(值比較)

CASE value
    WHEN compare_value THEN result
    [WHEN ... THEN ...]
    [ELSE result]
END
SELECT CASE 1 WHEN 1 THEN 'one' WHEN 2 THEN 'two' ELSE 'more' END;  -- 'one'

搜尋 CASE(條件比較)

CASE
    WHEN condition THEN result
    [WHEN ... THEN ...]
    [ELSE result]
END
SELECT CASE WHEN 1>0 THEN 'true' ELSE 'false' END;  -- 'true'

BINARY 影響字串比較

SELECT CASE BINARY 'B' WHEN 'a' THEN 1 WHEN 'b' THEN 2 END;  -- NULL (大小寫敏感)

最佳實踐

  • 單純 NULL 替換:IFNULL / COALESCE(多參數)。
  • 布林條件分支:IF(簡單雙分支)或 CASE(多重條件、可讀性佳)。
  • 避免在 IF 第一參數直接放浮點/字串,務必加比較運算。
  • CASE 無匹配且無 ELSE 回傳 NULL。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved