CASE 表達式
通過本篇文章我們來學習一下CASE表達式的基本使用方法。
CASE表達式有簡單 CASE表達式(simple case expression)和搜索 CASE表達式(searched caseexpression)兩種寫法,它們分別如下所示。
- CASE 表達式的寫法
-- 簡單CASE 表達式
CASE sex
WHEN ‘1‘ THEN ‘男‘
WHEN ‘2‘ THEN ‘女‘
ELSE ‘其他‘
END
-- 搜索CASE 表達式
CASE
WHEN sex = ‘1 ‘
THEN ‘男‘
WHEN sex = ‘2‘
THEN ‘女‘
ELSE ‘其他‘
END
?
這兩種寫法的執行結果是相同的,"sex"列(字段)如果是 ‘1‘,那麽結果為男;如果是 ‘2‘,那麽結果為女。簡單 CASE表達式正如其名,寫法簡單,但能實現的事情比較有限。簡單 CASE表達式能寫的條件,搜索 CASE表達式也能寫,我個人推薦采用搜索 CASE表達式的寫法。
我們在編寫 SQL 語句的時候需要註意,在發現為真的 WHEN子句時,CASE表達式的真假值判斷就會中止,而剩余的 WHEN子句會被忽略。為了避免引起不必要的混亂,使用 WHEN子句時要註意條件的排他性。
- 剩余的 WHEN 子句被忽略的寫法示例
-- 例如,這樣寫的話,結果裏不會出現"第二"
CASE
WHEN
col_1 IN (‘a‘, ‘b‘) THEN ‘第一‘
WHEN
col_1 IN (‘a‘) THEN ‘第二‘
ELSE
‘其他‘ END
此外,使用 CASE 表達式的時候,還需要註意以下幾點。 註意事項 1:統一各分支返回的數據類型
雖然這一點無需多言,但這裏還是要強調一下:一定要註意 CASE 表達式裏各個分支返回的數據類型是否一致。某個分支返回字符型,而其他分支返回數值型的寫法是不正確的。
註意事項 2:不要忘了寫 END
使用 CASE 表達式的時候,最容易出現的語法錯誤是忘記寫 END 。雖然忘記寫時程序會返回比較容易理解的錯誤消息,不算多麽致命的錯誤。但是,感覺自己寫得沒問題,而執行時卻出錯的情況大多是由這個原因引起的,所以請一定註意一下。
註意事項 3:養成寫 ELSE 子句的習慣
與 END 不同,ELSE 子句是可選的,不寫也不會出錯。不寫 ELSE 子句時,CASE 表達式的執行結果是 NULL 。但是不寫可能會造成"語法沒有錯誤,結果卻不對"這種不易追查原因的麻煩,所以最好明確地寫上 ELSE 子句(即便是在結果可以為 NULL 的情況下)。養成這樣的習慣後,我們從代碼上就可以清楚地看到這種條件下會生成 NULL,而且將來代碼有修改時也能減少失誤。
CASE 表達式