oracle中的case用法詳解

case語句的種類:

1.簡單case語句

語法:
case exp when comexp then returnvalue

when comexp then returnvalue
else returnvalue
end

case到end之間相當於一個具體的值,可以做運算,取別名,嵌套case 等等。
只要把case到end當作一個運算結果的表達式就可以了。

舉例:
select cust_last_name,
case credit_limit when 100 then ‘low’
when 5000 then ‘high’
else ‘medium’
end
from customers;

2.搜索case語句

語法:
case when boolean then return value

when boolean then return value
else retur nvalue
end

舉例:
select case when id between 1 and 10 then ‘low’
when id between 20 and 30 then ‘mid’
when id between 40 and 50 then ‘high’
else ‘unknow’
end
from product;

簡單case和搜索case之間的區別:

1.簡單case只能是when後面的表達式完全匹配case後的表達式,相當於 =,所以也不能匹配null。
2. searched case可以作爲比較條件,那麼可以使用like、!=、between …and、<、=、is null、is not null等,比簡單case的使用更加廣泛,完全可以替代簡單case。

注意事項:

1.case 表達式返回的是一個確定的value,若前面的都不匹配,則返回else中的項.
2.簡單case 中的表達式,when 後面的表達式類型應該全部保持一致.
3.所有的then 後面的return_value類型要保持一致.
4.對於簡單case 表達式,也就是case 表達式 when…那麼when null 總是取不到。也就是case 後面的表達式如果值爲null,不會與when null 匹配,只會與else匹配.
5.對於searched case來說,有自動類型轉換,只要條件成立就可以。
如:select case when 1=‘1’ then 1 end from dual; 其中1='1’條件成立

值得一提的是: sql中的case語句與pl/sql中的case語句的不同之處:
前者的else不是必須的,如果沒有匹配就返回null;後者的else不寫,則報case_not_found異常.

case中嵌套子查詢
Case語句中可以使用子查詢,但是必須返回一行,不可以是多行.
如:
select case (select count() as s1 from t1 where a = 1)
when (select count(
) as s2 from t1, t2 where t1.a = t2.a and t2.a = 1) then ‘相等’
else ‘不相等’
end
from dual;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章