'not like' 在甲骨文中

'not like' in 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) 不像 '%home%' 组件,因为当所有组件实际上都为真时,它似乎将语句呈现为假 - 如果我将该部分排除在外 - 语句有效很好。

欢迎提出任何建议以使其正常工作或解决我的逻辑错误。

谢谢。

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