case when的功能相对于Decode强大不少,但是decode使用起来,相对于Decode简单,而且sql语句看起来简约,但是对于复杂的情况下,decode就不行了,如果逻辑简单,使用Decode,如果逻辑比较的复杂,就不能用decode了,比如判断参数在某个范围的情况。
用在查询结果
查询的数据,我们想将数据格式化一下,所以就需要通过case when来进行操作,同时我们还可以简化这种操作,通过 DECODE这个函数,也可以解决类是的操作,但是decode的缺点是,只能判断值是否等于,所以对于判断大小,和空的情况,需要结合sign条件
select case
when A.Tb_NO > 10 then
'duitou'
else
'budui'
end as casewhen
from TABLE1 A
化成decode的写法
select decode(sign( A.Tb_NO - 10),1,'duitou','budui') as decode
from TABLE1 A
DECODE细节
语法
decode(条件,值1,翻译值1,值2,翻译值2,...值n,翻译值n,缺省值)
判断值的大小
sign()函数:根据某个值是0、正数、负数,分别返回0、1、-1
A>B, A-B>0, sign(A-B)=1, 获得大值即A,
decode(sign(A-B),1,A,B) A<B, A-B<0, sign(A-B)=-1,
获得小值即A,
decode(sign(A-B),-1,A,B)
判断是否为空
decode(col1,NULL,col1,'AAA')
用在查询条件
SELECT *
FROM TABEL1 M1,
TABLE2 M2
WHERE M1.Tb_CD = SUBSTR(M2.Tb_CD,1, case when M2.Yk_Kbn in ('1','3') then 2 else 1 end)
查询结果
使用decode的写法
select * FROM TABEL1 M1,
TABLE2 M2
WHERE M1.Tb_CD = SUBSTR(M2.Tb_CD,1, decode(M2.Yk_Kbn,'1',2,'3',2,1))
decode 的查询结果
查询的结果都一致