MySQL case when 用法
最近有個需求,需要對返回結果判斷並進行結果映射,使用到了 case when 語句。
1、語法
1.1、簡單函數
CASE case_value
WHEN when_value THEN statement_list
[WHEN when_value THEN statement_list] ...
[ELSE statement_list]
END CASE
1.2、搜索函數
CASE
WHEN search_condition THEN statement_list
[WHEN search_condition THEN statement_list] ...
[ELSE statement_list]
END CASE
2、示例
2.1、簡單函數示例
這里以查詢 user 的 sex 字段為例, 當 sex = 'f' 時結果映射為 '女', 反之映射為 '男':
select u.id, u.name,
case u.sex when 'f' then '女' else '男' end as sex
from user u
where u.id <= 3
結果如下:
可以看到 sex 字段的結果變為了 '男'、'女'。
2.2、搜索函數示例
同樣查詢 user 的 sex 字段,注意比較這兩種寫法的區別
select u.id, u.name,
case when u.sex = 'f' then '女' else '男' end as sex
from user u
where u.id <= 3
when后面是一個邏輯表達式,若表達式為真,則 sex 的結果為 '女',若表達式為假,則 sex 的結果為 '男',
執行查詢可以得到上面示例一樣的結果。
3、兩種語法選擇哪種?
一般情況下選擇搜索函數,即第二種,能夠面對更加復雜的查詢。
現在要查詢 user 的 age 字段,即客戶的年齡,不同的 age 對應的年齡段稱呼不同:
select u.id, u.name,
case when u.age <= 18 then '未成年'
when u.age between 19 and 40 then '青年'
else '中年' end as '年齡段'
from user u
where u.id <= 3
第一種語法無法滿足這樣復雜的查詢,故學習使用搜索函數便可以了。