select
case
when ''!='abcd'
then 'nodate'
else 'date'
end;
我希望''
代表null,但是当我执行此查询时,我将'date'
作为输出,而不是'nodate'
。这个查询有什么问题?为什么''!='abcd'
条件检查成为现实?
答案 0 :(得分:2)
在看了这个答案的评论后,这里是解释 -
在您的示例中,''
在Oracle中被视为NULL
,因此'' != 'abcd'
被评估为UNKNOWN
,这就是返回'else子句'结果的原因(而不是'when子句'结果)。
如果您想查看NULL
的某些列,请明确提及它。
...case when columnName is NULL then ... else ... end
或者如果您要检查某些列值为'abcd'
,请使用 -
...case when columnName != 'abcd' then ... else ... end
答案 1 :(得分:1)
如果要检查NULL,请尝试以下操作:
value IS NULL
因此,如果您想将''
替换为NULL
,请不要放置NULL != 'abcd'
,但是:
'abcd' IS NOT NULL
如果有变量而不是''
,请尝试:
IF (l_variable != 'abcd) or (l_variable IS NULL)
然而,发布完整的代码而不是修改后的部分会更好。
答案 2 :(得分:0)
使用NULL来检查值是否为NULL,另请参阅http://www.dba-oracle.com/t_case_statement_else_null_value.htm
答案 3 :(得分:0)
我认为你想要的是
当YourColumn为null然后'nodate'时,'yes date'结束