Oracle之case when和decode-yellowcong
2017-09-05 10:17
615 查看
case when的功能相对于Decode强大不少,但是decode使用起来,相对于Decode简单,而且sql语句看起来简约,但是对于复杂的情况下,decode就不行了,如果逻辑简单,使用Decode,如果逻辑比较的复杂,就不能用decode了,比如判断参数在某个范围的情况。
化成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 的查询结果
查询的结果都一致
相关文章推荐
- Oracle 行转列总结 Case When,Decode,PIVOT 三种方式
- Oracle 行转列总结 Case When,Decode,PIVOT 三种方式 - 转
- Oracle中case when和decode的用法
- Oracle 行转列总结 Case When,Decode,PIVOT 三种方式
- Mysql中ifNull()/if()/case when用法和Oracle中nvl()/nvl2()/decode()的用法及其比较
- oracle case when及decode的用法
- Oracle decode case when 行转列 分组查询
- Mysql中ifNull()/if()/case when用法和Oracle中nvl()/nvl2()/decode()的用法
- 表的转置 行转列: DECODE(Oracle) 和 CASE WHEN 的异同点
- Oracle中的CASE When和Decode比较
- Oracle case when decode and sequence
- 【Oracle学习】之 在sqlplus设置格式 和 case...when 和 decode
- ORACLE 中 DECODE 与 CASE WHEN THEN 用法
- Mysql-通过case..when实现oracle decode()函数进行多值多结果判断
- 关于oracle中查询语句 decode和 case when 的用法
- oracle中decode和case when的区别
- oracle-SQL-case when 改用 DECODE
- oracle case when then 条件判断
- oracle的case when有两种使用方法
- Oracle sql语句中不支持boolean类型(decode&case)