1. 程式人生 > >CASE 表達式

CASE 表達式

例如 sql amp 情況下 避免 文章 -s ack ref

通過本篇文章我們來學習一下CASE表達式的基本使用方法。

CASE表達式有簡單 CASE表達式(simple case expression)和搜索 CASE表達式(searched caseexpression)兩種寫法,它們分別如下所示。

  • CASE 表達式的寫法

-- 簡單CASE 表達式 
			


				CASE sex


				WHEN1THEN


				WHEN2THEN


				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 表達式