使用 CASE 表達(dá)式,我們可以在 SQL 中實(shí)現(xiàn)類似 if-elseif-else 邏輯。Oracle 9i 及其以上版本,都支持 CASE 表達(dá)式萧福。
推薦使用 CASE 表達(dá)式,因?yàn)橄鄬?duì)于 DECODE() 函數(shù)來說辈赋,CASE 表達(dá)式與 ANSI 兼容鲫忍,且已成為 SQL /92 標(biāo)準(zhǔn)的一部分,而且 CASE 表達(dá)式更易理解炭庙。
1 使用表達(dá)式確定返回值
語法如下:
CASE search_expression
WHEN expression1 THEN result1
WHEN expression2 THEN result2
...
WHEN expressionN THEN resultN
ELSE default_result
END
其中 :
- search_expression 是待求值的表達(dá)式 饲窿。
- expression1 煌寇、expression2焕蹄、…、expressionN 是要與 search_expression 進(jìn)行比較的表達(dá)式 阀溶。
- result1 腻脏、 result 2、…银锻、 resultN 是相應(yīng)邏輯判斷分支的返回值永品。假設(shè) expressionN 的值等于 search_expression ,那么就返回 resultN 击纬,以此類推鼎姐。
- ELSE 中的 default_result 是當(dāng)上述表達(dá)式都無法匹配時(shí),所返回的默認(rèn)值更振。
select n.STAFF_NAME,
case n.PASSWORD_LEVEL
when 1 then '弱密碼'
when 2 then '中等密碼'
when 3 then '強(qiáng)密碼'
else '未知'
end
from NCC_STAFF_MANAGER n;
運(yùn)行結(jié)果:
注意: NULL 必須放在 else 條件中才有效炕桨。放在 when 表達(dá)式中,無法判定:
select
case null
when null then 'null'
else 'when 中無法比較'
end
from dual;
運(yùn)行結(jié)果:
when 中無法比較
從這個(gè)示例中可以看出肯腕, when null 無效献宫,實(shí)際 null 表達(dá)式走的是 else 分支。
2 使用條件確定返回值
語法如下:
CASE
WHEN condition1 THEN result1
WHEN condition2 THEN result2
WHEN conditionN THEN resultN
ELSE default_result
END
與“使用表達(dá)式確定返回值”的語法相比較实撒,少了 search_expression姊途。其它部分相同涉瘾。
我們可以把上例改為 “使用條件確定返回值” 的語法形式,實(shí)現(xiàn)同樣的功能:
select n.STAFF_NAME,
case
when n.PASSWORD_LEVEL=1 then '弱密碼'
when n.PASSWORD_LEVEL=2 then '中等密碼'
when n.PASSWORD_LEVEL=3 then '強(qiáng)密碼'
else '未知'
end
from NCC_STAFF_MANAGER n;
在“使用表達(dá)式確定返回值”的語法中捷兰,我們還可以在 when 表達(dá)式中使用操作符立叛,請(qǐng)看下例:
select n.STAFF_NAME,
case
when n.PASSWORD_LEVEL<=2 then '密碼修改提醒'
when n.PASSWORD_LEVEL>2 then '強(qiáng)密碼'
else '未知'
end
from NCC_STAFF_MANAGER n;
運(yùn)行結(jié)果: