您的位置:首页 > 数据库 > Oracle

Oracle之case when和decode-yellowcong

2017-09-05 10:17 615 查看
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 的查询结果



查询的结果都一致
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: