SQL where子句不区分' - '和NULL

时间:2015-09-18 08:32:36

标签: sql

fb1

此查询排除select A from table1 where A <> '-' 以及空值。为什么空值?

2 个答案:

答案 0 :(得分:1)

  

&LT;&GT;是标准SQL-92; !=是它的等价物。两者都评估价值,   NULL不是 - NULL是占位符,表示存在缺失   价值观。

     

这就是为什么你只能使用IS NULL / IS NOT NULL作为谓词的原因   这种情况。

     

此行为并非特定于SQL Server。所有符合标准的SQL方言都以相同的方式工作。

参见参考资料:

Not equal <> != operator on NULL

只需找到适当的关键字即可有效浏览问题的结果

答案 1 :(得分:0)

如果您未通过NULL明确地包含这些值,则

IS NULL值总是被排除在外。 NULL表示不是未知。您无法使用= NULL选择它们,也可以使用<> NULL省略它们。与NULL的任何比较结果都不在truefalse中,而在未知中。

你必须使用

SELECT A from table1 where A IS NULL OR A <> '-';

使用COALESCE的另一种方式:

SELECT A from table1 where COALESCE(A, '') <> '-';

阅读:https://en.wikipedia.org/wiki/SQL#Null_or_three-valued_logic_.283VL.29