相信很多小伙伴在开发过程中都有用到 case when 表达式和 decode 函数, 那么会不会有小伙伴和我一样刚开始有很多疑虑, 什么情况下用 case when, 什么情况下用 decode 呢? 两者有什么区别呢? 今天小编就带大家细分一下两者的区别:
case when 表达式不仅可以等值连接还可以范围判断; decode 函数可以等值连接.
这样说大家可能不能理解, 举个例子吧, 如下;
创建一张表 tmp1, 列为 dept 表示部门信息, 分别有 10,20,30,40,50 部门:
![](https://s1.51cto.com/images/blog/201905/29/120a4ff64fb1d8859ddad5488d15d82b.jpg?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
用 case when 表达式判断, 如果部门信息为 10, 则判断为 A, 部门信息为 20, 则判断为 B, 其他部门信息判断为 C:
- select case when dept = 10 then 'A'
- when dept = 20 then 'B'
- else 'C'
- from tmp1;
或者:
- select case dept when 10 then 'A'
- when 20 then 'B'
- else 'C'
- from tmp1;
用 decode 函数判断, 如果部门信息为 10, 则判断为 A, 部门信息为 20, 则判断为 B, 其他部门信息判断为 C:
select decode(dept,10,'A',20,'B','C') from tmp1;
而如果想判断部门信息为 10 或 20 时, 判断为'A', 部门信息为 30 或 40 时, 判断为'B', 其他则判断为'C'. 这时只能用 case when 表达式:
- select case when dept between 10 and 20 then 'A'
- when dept between 30 and 40 then 'B'
- else 'C'
- end
- from tmp1;
注: 这时 sql 不能再写为
- select case dept when between 10 and 20 then 'A'
- when between 30 and 40 then 'B'
- else 'C'
- end
- from tmp1;
这时会报错: ORA-00936: 缺失表达式
本篇文章已经结束了, 你学会了吗? 如若还有疑问, 可留言给小编, 看到必回复!
来源: http://www.bubuko.com/infodetail-3075417.html