我有一个表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。
答案 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。