如何选择具有空列值的行?

29

考虑下面的数据库表:

id      |  is_visible
________|_______________
1       |  true
2       |  false
3       |               -- i.e. null
我想选择所有具有is_visible = null的行。我尝试了以下查询:


SELECT * FROM table_name WHERE is_visible IS NULL;
SELECT * FROM tab WHERE is_visible = null;     -- 0 results
SELECT * FROM tab WHERE is_visible <> true;    -- only fields with false value
SELECT * FROM tab WHERE is_visible <> false;   -- only fields with true

我在postgresql和sql server中尝试过它
如何选择具有is_visible = null的行?


1
是 null 比 = 0 或 isnull(is_visible,null)=null 更好。 - mohan111
为什么你同时使用了 sql-server 和 postgresql -- 你不可能同时在用两者。 - Hogan
@Hogan 我正在使用postgresql,但当我遇到问题时,我尝试在sql-server中做同样的事情。 - afzalex
2个回答

57

在Postgres和SQL Server中,

SELECT * FROM tab WHERE is_visible is null;

如果您想选择列值不为 null 的行,则使用 is not null 运算符:

SELECT * FROM tab WHERE is_visible is not null;

非常感谢,简单的答案让我省了很多时间去查看文档。祝您有美好的一天,先生 :) - a3k

4
在SQL Server中,由于null是未知或不可用的,因此无法比较两个null值。
请使用IS NULL运算符: https://technet.microsoft.com/en-us/library/aa196339(v=sql.80).aspx
SELECT * FROM tab WHERE is_visible IS NULL;  -- only field having null value
SELECT * FROM tab WHERE is_visible IS NOT NULL;    -- fields having not null values

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接