我正试图编写一个相当基本的查询问题。
select count (p_id) as mycustomer from person where date_active = null;
哪个不起作用。 (运行,但返回0)但是,下面的语句会(并返回一个数字),任何人都可以帮忙吗?
select count (p_id) as mycustomer from person wher date_active > '1-MAY-09';
我试图在表中找到date_active为null的p_id总数。 (他们确实存在,我可以看到他们!) 感谢
答案 0 :(得分:4)
我认为您需要使用:
select count (p_id) as mycustomer from person where date_active is null;
答案 1 :(得分:1)
尝试以下
select count (p_id) as mycustomer from person where date_active is null;
= null
不正确,无法执行您想要的操作。这个link提供了更多详细信息
答案 2 :(得分:1)
select count (p_id) as mycustomer from person where date_active IS null;
(注意IS NULL运算符而不是=)
答案 3 :(得分:1)
您必须使用is
oprator找到null:
select count (p_id) as mycustomer from person where date_active is null;
NULL不是一个值(它表示缺少一个值),所以你不能使用像=,!=,<,>这样的标量操作符。与NULL结合使用。
答案 4 :(得分:1)
这应该有效:
select count (p_id) as mycustomer from person where date_active IS null;
答案 5 :(得分:0)
SQL不适用于二进制逻辑(仅true
和false
)。它适用于(至少)三元逻辑(true
,false
和null
)。第三个值使逻辑条件的评估变得复杂(如条件中的=
)
基本上,任何涉及null的表达式都将返回一个空值,并且由于null
永远不会true
,查询将不会返回任何行,就像你写的那样
select count (p_id) as mycustomer from person where 1 = 2
要解决此问题,有一些特殊的语法结构,最常见的是is null
和is not null
条件。正如其他答案指出的那样,要获得需要编写的空值
select count (p_id) as mycustomer from person where date_active is null
关于空值的有趣之处在于它们既不等于也不等于其他空值。
select * from person where null=null
和
select * from person where null!=null
两者都不会返回任何行。