<>和!=在WHERE条件下避免NULL

时间:2015-11-19 05:53:15

标签: sql sql-server sql-server-2008 sql-server-2012

我有一个表PATIENT,其中包含STATUS列。当我查询STATUS不等于1时,我期待结果为NULL和2。

但结果我只得到2分。有人可以帮我这个吗?

CREATE TABLE #PATIENT
(STATUS INT)

INSERT INTO #PATIENT (STATUS)
SELECT 1 
UNION
SELECT 2 
UNION 
SELECT NULL 

SELECT * FROM #PATIENT WHERE STATUS <> 1

当我用

查询时
SELECT * FROM #PATIENT  WHERE ISNULL(STATUS, 0) != 1

我可以得到NULL和2作为结果。

这是SQL SERVER 2012。

4 个答案:

答案 0 :(得分:3)

您可以在条件为OR的{​​{1}}中使用WHERE

STATUS IS NULL

这样就可以了。

修改

  

从概念上讲, SELECT * FROM #PATIENT WHERE STATUS <> 1 OR STATUS IS NULL 表示NULL,而且是“a missing unknown value”   与其他价值观有所不同。

     

您不能使用=, <, or <>等算术比较运算符   测试NULL

     

因为与NULL is also进行任何算术比较的结果   NULL,您无法从此类比较中获得任何有意义的结果

我们不能将任何内容与null等同或不等同,这就是为什么IS NULL

  

SELECT NULL <> 1 ===&gt; NULL

 Even though it is supposed to be true, it will return `NULL`

希望这有帮助。

答案 1 :(得分:1)

将NULL值与任何值进行比较时,结果始终为NULL。

因此,如果你想选择NULL值,那么试试这个:

SELECT * FROM #PATIENT WHERE STATUS <> 1 OR STATUS IS NULL

<强> DEMO

答案 2 :(得分:0)

概念上&#34; NULL&#34;意味着缺失价值。要测试NULL IS NULL或IS NOT NULL条件。算术运算符不能用于比较NULL值。

NULL&lt;&gt; 1 ::返回false,因为NULL可以是1或任何其他值(未知值)。

答案 3 :(得分:0)

Null是结构化查询语言(SQL)中使用的特殊标记,用于指示数据库中不存在数据值。 原因是因为你只有2而且NOT NULL是因为在SQL中没有任何东西等于NULL但也没有 NOT 等于NULL。 在简单的单词中,您不能将任何值等同于并且不等于NULL。