case表達式

case表達式

Case表達式,是可以在sql中使用if ..then..else的邏輯判斷,而避免使用PL/SQL的有效方法。

基本介紹

  • 中文名:case表達式
  • 類別:程式語言
  • 國家:世界
  • 套用:編程
介紹,分類,用法,其它例子,

介紹

介紹case語句的不同的表達式及作用、用法。

分類

在sql中主要有兩種:簡單case和搜尋case,在plsql中還有兩種case 語句,與decode 類似。(有一定的區別)
簡單的case:
語法:case exp when comexp then returnvalue
..when comexp then returnvalue
Else
Returnvalue
End
使用規則case簡介。
Case到end之間相當於一個具體的值,可以做運算,取別名,嵌套case 等等。只要把case到end當作一個運算結果的表達式就可以了。
《注意,中間一直到end 都沒有其他標點符號》
搜尋case:
SELECT cust_last_name,CASE credit_limit WHEN 100 THEN ’Low’WHEN 5000 THEN ’High’ELSE ’Medium’ ENDFROM customers;
搜尋case例子
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'endfrom product;update emp setsalary=case when salary<2000 then salary*1.1when salary between 2000 and 4000 then salary*1.05when salary>4000 then salary*1.04elsenullend;select case when name like '全球%' then 'true'when name like '神州行' then 'false'else 'mm'endfrom trademark;
比較操作,可以使用like,between … and ..,!=,<,>=等操作符以及其他返回boolean類型的操作符。
簡單case和searched case之間的區別:
1. 簡單case只能是when後面的表達式完全匹配case後的表達式,相當於 =,所以也不能匹配null。
2. searched case可以作為比較條件,那么可以使用like,!=,between ..and,<,=,is null,is not null等,比簡單case的使用更加廣泛,完全可以替代簡單case。

用法

1.Case 表達式返回的是一個確定的value,如果沒有else,若前面的都不匹配,則返回null。<else 不是必須的,都沒有匹配返回null,這與pl/sql 中的case 語句不同,case 語句如果不寫else,都沒有匹配,則報case_not_found異常>
2.簡單case 中的表達式,when 後面的表達式類型應該全部保持一致。如:
select case 'a' when 'a' then 1 when 9 then 3 end from dual;--所有的when 類型必須與第case之後的表達式值類型保持一致,資料的9應該是’9’,沒有自動轉換成char,和一般的sql中自動轉換不同。
3.所有的then 後面的return_value類型要保持一致
select case 'a' when 'a' then '1' when '9' then '3' else 3 end from dual;--紅色部分類型應該保持一致,沒有自動轉換,else後面的3應該是’3’.
4.對於簡單case 表達式,也就是case 表達式 when…那么when null 總是取不到。也就是case 後面的表達式如果值為null,不會與when null 匹配,只會與else 匹配。如:
select case null when null then 'null' else 'not matched!' end from dual;--case的null不會與when後面的null匹配,只會返回else的結果。
關於這點,如果case 後面的表達式有可能為null,如果需要匹配null,那么可以使用decode 和searched case。
Decode:
decode(exp,
value1,res1,
value2,res2,….,
valuen resn,
elsevalue)。
如果其中有存在exp為null,那么如果valuei中有null,則會匹配,返回resi。如:
select decode(null,'a1','1','a2','2',null,'null','not know!') from dual;--返回字元串null
searched case:
case when
condition_1 then value1
when condition_2 then value2…
when condtion_i then valuei
else
elsevalue
end
如果要匹配null,只需要 case when exp is null then ..就可以了
5.對於searched case來說,有自動類型轉換,只要條件成立就可以。如:select case when 1='1' then 1 end from dual;--1=’1’條件成立
6.參數最高限制255 個。包括case exp 中的exp 和else 中的,以及when exp1 value 1 算兩個參數。如果語句複雜,超過這個限制,可以考慮使用嵌套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;

相關詞條

熱門詞條

聯絡我們