SQL Server查询中的NULL值

Eli*_*ith 3 sql t-sql sql-server

我在表格中有一个Status列,它有3个值 - 'N/A','Single','Multiple'.某些行具有NULL"状态"列的值.

我需要提取Status不为空且不是'N/A'的所有行.基本上,我需要状态为"Single"或"Multiple"的所有行.

我一直在阅读关于NULL实际上相当于'UNKNOWN'.

如果我说

SELECT *
FROM t_userstatus
WHERE status <> 'N/A'
Run Code Online (Sandbox Code Playgroud)

我得到结果(所有行只包含"单个"或"多个").

我想知道的是,上面的WHERE子句是否总是排除具有NULL值的行?这是预期的行为吗?

是什么导致这个排除空行,​​即使我没有明确指定它?

在我的查询中,我是否必须明确说出状态IS NOT NULL

我对编程比较陌生,任何帮助都表示赞赏.

Ker*_*mit 6

这不是正常的行为,因为N/A(Single&Multiple也是)是与之无关的字符串NULL.即使NULL评估为未知并且可能不返回,您应该明确使用IS NOT NULL.

SELECT [column_list] FROM t_userstatus
WHERE status IS NOT NULL AND status <> 'N/A'
Run Code Online (Sandbox Code Playgroud)

我还建议你养成指定列表的习惯.


And*_*mar 5

SQL使用三值逻辑:true,false和unknown.任何与null结果的比较unknown.

所以null <> 'N/A'评估为unknown.由于unknown不是这样,这意味着排除了行.