介紹如何在 MySQL/MariaDB 資料庫中使用 CASE 進行多種條件的判斷。
CASE 多條件判斷
CASE 的作用跟 IF 條件判斷很類似,主要的差異是它可以處理多種條件的判斷,根據不同的情況傳回不同的結果:
CASE
WHEN 條件1 THEN 結果1
WHEN 條件2 THEN 結果2
...
ELSE 其他結果
END
實際應用範例一
WEEKDAY 可用來查詢某個日期是禮拜幾:
-- 查詢今天禮拜幾
SELECT WEEKDAY(CURDATE());
+--------------------+ | WEEKDAY(CURDATE()) | +--------------------+ | 0 | +--------------------+
0 代表禮拜一,而 6 代表禮拜日,我們可以用以下的 CASE 語法,將原始的數字轉為我們需要的文字:
-- CASE 多條件判斷
SELECT CASE
WHEN WEEKDAY(CURDATE()) = 5 THEN "週六"
WHEN WEEKDAY(CURDATE()) = 6 THEN "週日"
ELSE "上班日"
END AS result;
+-----------+ | result | +-----------+ | 上班日 | +-----------+
實際應用範例二
假設我們有一些人員的資料如下:
SELECT * FROM user_table;
+----+-------+------+ | id | name | age | +----+-------+------+ | 5 | John | 23 | | 6 | Mary | 45 | | 7 | Joe | 15 | | 8 | Smith | 21 | +----+-------+------+
如果我們希望依照年齡將人員區分為三組,未滿 20 歲稱為 Young,20 到 40 歲稱為 Middle-aged,而 40 歲以上稱為 Old,可以這樣寫:
-- CASE 多條件判斷
SELECT name, age,
CASE
WHEN age < 20 THEN "Young"
WHEN age < 40 THEN "Middle-aged"
ELSE "Old"
END AS grp
FROM user_table;
+-------+------+-------------+ | name | age | grp | +-------+------+-------------+ | John | 23 | Middle-aged | | Mary | 45 | Old | | Joe | 15 | Young | | Smith | 21 | Middle-aged | +-------+------+-------------+
