我在何时遇到oracle的问题。
SELECT CASE WHEN '7C54D3E133830A78E040A8C010014B7D' != '' THEN '7C54D3E133830A78E040A8C010014B7D' WHEN 'e84a4433966c4b8996ce34905acff63d' != '' THEN 'e84a4433966c4b8996ce34905acff63d' WHEN '7faa9126b1c6412fa58375ab2b2be1db' != '' THEN '7faa9126b1c6412fa58375ab2b2be1db' ELSE NULL END FROM DUAL
该查询始终返回null,尽管很明显结果应该是第一种情况。我是否缺少有关oracle中字符串比较的内容?
您要再次检查字符串和一个空字符串,从而出现问题;在Oracle中,您最好检查一下您的字符串is not null:
is not null
SELECT CASE WHEN '7C54D3E133830A78E040A8C010014B7D' is not null THEN '7C54D3E133830A78E040A8C010014B7D' WHEN 'e84a4433966c4b8996ce34905acff63d' is not null THEN 'e84a4433966c4b8996ce34905acff63d' WHEN '7faa9126b1c6412fa58375ab2b2be1db' is not null THEN '7faa9126b1c6412fa58375ab2b2be1db' ELSE NULL END FROM DUAL
关于Oracle处理空字符串和空值的方式,在这里您可以找到更多信息
一个例子:
select q'['' = '']' , case when '' = '' then 'YES' else 'NO' end from dual union all select q'['' is null]' , case when '' is null then 'YES' else 'NO' end from dual union all select q'['' = null ]' , case when '' = null then 'YES' else 'NO' end from dual union all select q'[null = null]' , case when null = null then 'YES' else 'NO' end from dual union all select q'[null is null]' , case when null is null then 'YES' else 'NO' end from dual union all select q'['' != '']' , case when '' != '' then 'YES' else 'NO' end from dual union all select q'['' is not null]' , case when '' is not null then 'YES' else 'NO' end from dual union all select q'['' != null ]' , case when '' != null then 'YES' else 'NO' end from dual union all select q'[null != null]' , case when null != null then 'YES' else 'NO' end from dual union all select q'[null is not null]', case when null is not null then 'YES' else 'NO' end from dual
给出:
'' = '' NO '' is null YES '' = null NO null = null NO null is null YES '' != '' NO '' is not null NO '' != null NO null != null NO null is not null NO
简而言之,谈论时,您可以依靠的唯一支票NULL是: IS [NOT] NULL
NULL
IS [NOT] NULL