定義
計算條件列表,並返回多個可能的結果表達式之一。
表達式類型
case具有兩種格式:
- 簡單case表達式,它通過將表達式與一組簡單的表達式進行比較來確定結果。
- case搜索表達式,它通過計算一組布爾表達式來確定結果。
這兩種方式,都支持可選的 else參數,大部分情況下是可以實現相同的功能。
case可用於允許使用有效表達式的任意語句或子句, 例如,可以在 select、update、delete和 set等語句以及 select_list、in、where、order by和 having等子句中使用 Case。
語法
簡單case表達式
select
case input_expression
when when_expression then result_expression
when when_expression then result_expression
......
else else_result_expressionend
from
databasename.dbo.tablename
示例
case搜索表達式
select
case
when boolean_expression then result_expression
when boolean_expression then result_expression
......
else else_result_expressionend end
from
databasename.dbo.tablename
示例
語法解析
input_expression
使用簡單 case格式時計算的表達式。 input_expression 是任何有效的表達式 。
when when_expression
使用簡單 case格式時要與 input_expression 進行比較的簡單表達式 。 when_expression 是任何有效的表達式 。input_expression 及每個 when_expression 的數據類型必須相同或必須是隱式轉換的數據類型 。
then result_expression
當 input_expression = when_expression 的計算結果為 true時,或 boolean_expression 的計算結果為 true時返回的表達式 。 result expression 是任何有效的表達式 。
else else_result_expression
比較運算計算結果不為 true 時返回的表達式。 如果忽略此參數且比較運算計算結果不為 true,則 case返回 null。 else_result_expression 是任何有效的表達式 。 else_result_expression 及任何 result_expression 的數據類型必須相同或必須是隱式轉換的數據類型 。
when boolean_expression
使用 case 搜索格式時所計算的布爾表達式。 boolean_expression 是任何有效的布爾表達式 。
返回類型
從 result_expressions 和可選 else_result_expression 的類型集中返回優先級最高的類型 。
返回值
case 簡單表達式:
case 簡單表達式的工作方式如下:將第一個表達式與每個 when 子句中的表達式進行比較,以確定它們是否等效。 如果這些表達式等效,將返回 then 子句中的表達式。
-
僅用於等同性檢查。
-
按指定的順序計算每個 when 子句的 input_expression = when_expression。
-
返回首個 input_expression = when_expression 的計算結果為 true 的 result_expression 。
-
如果 input_expression = when_expression 的計算結果均不為 true,則在指定了 else 子句的情況下,SQLServer數據庫引擎將返回 else_result_expression;若沒有指定 else 子句,則返回 null 值 。
case 搜索表達式:
-
按指定順序對每個 when 子句的 boolean_expression 進行計算 。
-
返回首個 boolean_expression 的計算結果為 true 的 result_expression 。
-
如果 boolean_expression 的計算結果均不為 true,則在指定了 else 子句的情況下,數據庫引擎將返回 else_result_expression;若沒有指定 else 子句,則返回 null 值 。
優缺點
簡單case函數注重簡潔,但是它只適用於這種單字段的單值比較,而case搜索函數的優點在於適用於所有比較(包括多值比較)的情況。