通過本篇文章我們來學習一下CASE表達式的基本使用方法。 CASE表達式有簡單 CASE表達式(simple case expression)和搜索 CASE表達式(searched caseexpression)兩種寫法,它們分別如下所示。 CASE 表達式的寫法 我們在編寫 SQL 語句的時候需 ...
通過本篇文章我們來學習一下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 子句被忽略的寫法示例
1 -- 例如,這樣寫的話,結果里不會出現“第二” 2 CASE 3 WHEN col_1 IN ('a', 'b') THEN '第一' 4 WHEN col_1 IN ('a') THEN '第二' 5 ELSE '其他' END
此外,使用 CASE 表達式的時候,還需要註意以下幾點。 註意事項 1:統一各分支返回的數據類型
雖然這一點無需多言,但這裡還是要強調一下:一定要註意 CASE 表達式里各個分支返回的數據類型是否一致。某個分支返回字元型,而其他分支返回數值型的寫法是不正確的。
註意事項 2:不要忘了寫 END
使用 CASE 表達式的時候,最容易出現的語法錯誤是忘記寫 END 。雖然忘記寫時程式會返回比較容易理解的錯誤消息,不算多麼致命的錯誤。但是,感覺自己寫得沒問題,而執行時卻出錯的情況大多是由這個原因引起的,所以請一定註意一下。
註意事項 3:養成寫 ELSE 子句的習慣
與 END 不同,ELSE 子句是可選的,不寫也不會出錯。不寫 ELSE 子句時,CASE 表達式的執行結果是 NULL 。但是不寫可能會造成"語法沒有錯誤,結果卻不對"這種不易追查原因的麻煩,所以最好明確地寫上 ELSE 子句(即便是在結果可以為 NULL 的情況下)。養成這樣的習慣後,我們從代碼上就可以清楚地看到這種條件下會生成 NULL,而且將來代碼有修改時也能減少失誤。