来自实际的业务场景,做了脱敏处理:
1、case when 函数:
select
(case when A is not null then A
when B is not null then B
when substr(C,1,6) in('aa','bb','cc') then 1
when D = 'dd' then null
else 4 end) col
from tableA ;
注:case when语句优先级是从上至下的,满足一个条件后就会输出值,不会继续再向下执行;
2、decode 函数:
select
nvl(A,nvl(B,decode(substr(C,1,6),'aa',1,'bb',1,'cc',1,decode(D,'dd',null,2)))) col
from tableA ;
适用场景:case when使用比较灵活,比较适合复杂的条件;
性能比较:比两个语句的执行计划,这个场景下的执行计划相同,执行时间相差不多;