SQL 查询中出现 null 问题?
select
case
when ''!='abcd'
then 'nodate'
else 'date'
end;
在这里,我希望 ''
代表 null,但是当我执行此查询时,我得到 'date'
作为输出,而不是 'nodate'
。这个查询有什么问题?为什么''!='abcd'
条件检查会变成true?
select
case
when ''!='abcd'
then 'nodate'
else 'date'
end;
Here I hope ''
stand for null, but when I execute this query I am getting 'date'
as an ouput, rather than 'nodate'
. What is the problem in this query? Why does ''!='abcd'
condition checking become true?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
查看此答案的评论后,以下是解释 -
在您的示例中,
''
在 Oracle 中被视为NULL
,因此'' != 'abcd '
的计算结果为UNKNOWN
,这就是返回“else 子句”结果(而不是“when 子句”结果)的原因。如果您想检查某些列的
NULL
,请明确提及。或者如果您要检查某些列值是否为
'abcd'
则使用 -After looking at comments for this answer, here is the explaination -
In your example,
''
is considered asNULL
in Oracle and hence'' != 'abcd'
is evaluated toUNKNOWN
, which is the reason the 'else clause' result is returned (and not the 'when clause' result).If you want to check some column for
NULL
explicitly mention it.or if you are checking for some column value to be
'abcd'
then use -如果您想检查 NULL,请尝试以下操作:
value IS NULL
因此,如果您想用
NULL
替换''
,请不要输入NULL != 'abcd'
但是:'abcd' IS NOT NULL
如果那里有一个变量而不是
''
,请尝试:它会不过,最好发布完整的代码,而不是其中修改的部分。
If you want check for NULL, try this:
value IS NULL
So, if you want to replace
''
withNULL
, don't putNULL != 'abcd'
but:'abcd' IS NOT NULL
if there is a variable there and not
''
, try:It would be better however, to post complete code and not a modified part of it.
使用 NULL 检查值是否为 NULL,另请参见 http://www.dba-oracle.com /t_case_statement_else_null_value.htm
use NULL to check if the value is NULL, also see http://www.dba-oracle.com/t_case_statement_else_null_value.htm
我认为你想要的是
当 YourColumn 为 null 然后 'nodate' else 'yes date' end 的情况
I think what you want is
case when YourColumn is null then 'nodate' else 'yes date' end