首页 > 解决方案 > Oracle 中的“不喜欢”

问题描述

我有一个案例陈述:

CASE WHEN (X_MED_CENTER IN ('X','S','W','X') 
        OR OUTSIDE_FAC IN ('X MEDICAL CENTER'))
       AND LD_NOTE IS NULL AND LOWER(PROBLEM_CMT) NOT like '%home%'  
     THEN 1 else 0 end as CONTRACT 

问题是 LOWER(PROBLEM_CMT) NOT like '%home%' 组件,因为当所有组件实际上都为真时,它似乎会使语句变为 false - 如果我不考虑该部分 - 语句工作正常。

如果我的逻辑有问题,欢迎提出任何建议以使其正常工作或解决。

谢谢。

标签: oraclesql-like

解决方案


NULL可能是你的问题 - 尝试使用LOWER(nvl(PROBLEM_CMT,'x')) NOT like '%home%'

看到这个演示

Create table test as
select 1 as id, 'Home' as PROBLEM_CMT from dual union all
select 2 as id, 'abroad' as PROBLEM_CMT from dual union all
select 3 as id, NULL as PROBLEM_CMT from dual;

select id from test
where LOWER(PROBLEM_CMT) NOT like '%home%';

        ID
----------
         2 

select id from test
where LOWER(nvl(PROBLEM_CMT,'x')) NOT like '%home%';   

        ID
----------
         2 
         3 

推荐阅读