W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
條件表達(dá)式(Case Expression)允許用戶在不調(diào)用存儲過程的情況下,在 SQL 語句中使用 IF ... THEN ... ELSE
邏輯。
CASE { simple_case_expression
| searched_case_expression
}
[ ELSE else_expr ]
END
其中簡單條件表達(dá)式中 simple_case_expression
的語法為:
expr
{ WHEN comparison_expr THEN return_expr }...
搜索條件表達(dá)式 searched_case_expression
的語法為:
{ WHEN condition THEN return_expr }...
在一個簡單條件表達(dá)式中,OceanBase 數(shù)據(jù)庫會以 expr
為基準(zhǔn),在 WHEN ... THEN
中搜尋第一個與之等值的 comparison_expr
,并返回相應(yīng)的 return_expr
。如果沒有 WHEN ... THEN
滿足此情形,并且 ELSE
子句存在,那么 OceanBase 數(shù)據(jù)庫會返回 else_expr
。否則,OceanBase 會返回 NULL。
在搜索條件表達(dá)式中,OceanBase 會自左向右搜索直到 condition
條件成立,然后返回 return_expr
。如果所有條件都不成立,且 ELSE
子句存在,則數(shù)據(jù)庫返回 else_expr
。否則,數(shù)據(jù)庫會返回 NULL。
OceanBase 數(shù)據(jù)庫使用短路計算法則。對于簡單條件表達(dá)式,數(shù)據(jù)庫僅會在與 expr
比較之前計算 comparison_expr
的值,而不是在與 expr
比較之前就將計算所有 comparison_expr
的值。因此,如果前一個 comparison_expr
與 expr
相等,OceanBase 將不會計算下一個 comparison_expr
的值。對于搜索條件表達(dá)式,數(shù)據(jù)庫將會串行計算每個條件(Condition)是否為真,如果前一個條件(Condition)為真,OceanBase 將不會計算下一個條件。
對于簡單條件表達(dá)式,expr
和所有的 comparison_expr
的值的數(shù)據(jù)類型必須相同(如 CHAR
、VARCHAR2
和 NCHAR
; NVARCHAR2
、NUMBER
和 BINARY_FLOAT
,或 BINARY_DOUBLE
),或者都是數(shù)值類型。如果所有的返回表達(dá)式都是數(shù)值類型,則 OceanBase 會選擇最高優(yōu)先級的數(shù)據(jù)類型,顯式地將其它參數(shù)轉(zhuǎn)化為此數(shù)據(jù)類型,并返回這個數(shù)據(jù)類型。
對于簡單條件表達(dá)式和搜索條件表達(dá)式,所有的 return_exprs
的數(shù)據(jù)類型必須相同(如 CHAR
、VARCHAR2
和NCHAR
;NVARCHAR2
、NUMBER
和 BINARY_FLOAT
;BINARY_DOUBLE
),或者都是數(shù)值類型。如果所有的返回表達(dá)式都是數(shù)值類型,則 OceanBase 會選擇最高優(yōu)先級的數(shù)據(jù)類型,顯式地將其它參數(shù)轉(zhuǎn)化為此數(shù)據(jù)類型,并返回這個數(shù)據(jù)類型。
SELECT cust_last_name,
CASE credit_limit
WHEN 100 THEN 'Low'
WHEN 5000 THEN 'High'
ELSE 'Medium' END AS credit
FROM customer
ORDER BY cust_last_name, credit;
以下是搜索條件表達(dá)式的示例:
SELECT AVG(CASE WHEN e.salary > 2000 THEN e.salary
ELSE 2000 END) "Average Salary" FROM employee e;
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: