不匹配时如何返回null(与nullif函数相对)

时间:2019-05-15 07:30:00

标签: sql oracle

当两个exp不匹配时,我想获取null,例如nullif(exp1,exp2)将在相同时返回null,在不相同时返回第一个exp。

我已经尝试在子查询或创建函数的帮助下进行操作,但是需要一种简单,简单,标准的方法。

select * from table
where service_type = 'X3' 
or (1 <> (select nvl(min(1),2) from table where service_type = 'X3') 
and service_type is null)

此查询返回我想要的结果,但是我不需要使用子查询。

表的数据类似

service_type
------------
X4
X3
null

我想获取service_type匹配X3值是否返回X3,但如果不匹配(如X5),则返回null以匹配空记录。

当service_type ='X3'

service_type
------------
X3

当service_type ='X5'或其他任何类似'X%'的内容时,将返回null

service_type
------------
null

2 个答案:

答案 0 :(得分:2)

什么情况下

select case when service_type='x3' then service_type else null end
from table_name

答案 1 :(得分:0)

我认为您需要一个子查询来获取您实际想要实现的逻辑:

select t.*
from t
where t.service_type = :value or
      (t.service_type is null and
       not exists (select 1 from t t2 where t2.service_type = :value)
      );

您还可以使用窗口功能:

select t.*
from (select t.*, count(*) over (partition by service_type) as cnt
      from t
      where service_type = :value or service_type is null
     ) t
where service_type = :value or
      (cnt = 0 and service_type is null);