Oracle之case when和decode-yellowcong

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、正数、负数,分别返回01、-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 的查询结果

这里写图片描述

查询的结果都一致

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

狂飙的yellowcong

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值