2009-10-27 58 views
10

我试图计算具有空日期时间值的记录数。但是,由于某种原因,我的尝试失败了。我曾尝试以下两个查询没有任何的运气:SQL Server 2005 - 检查空日期时间值

SELECT COUNT(BirthDate) 
    FROM Person p 
WHERE p.BirthDate IS NULL 

SELECT COUNT(BirthDate) 
    FROM Person p 
WHERE p.BirthDate = NULL 

我在做什么错?当我查询所有记录时,我可以看到带有BirthDate为NULL的记录。

回答

22
SELECT COUNT(*) 
FROM Person 
WHERE BirthDate IS NULL 
3

试试这个

SELECT  COUNT(*) 
FROM  Person p 
WHERE  p.BirthDate IS NULL 
1

你需要使用 “IS NULL” 而不是 “= NULL”

SELECT 
    COUNT('') 
FROM 
    Person p 
WHERE 
    BirthDate IS NULL 
+0

w hy空串? – Fredou 2009-10-27 18:04:48

+0

使用空字符串会减少数据库的负载,因为它不检索任何数据,只是一个空字符串。 – MattB 2009-10-27 18:06:31

+3

但我的理解是,COUNT(*)也不加载任何东西。它只是做一个基数。至少在现代SQL Server实例中。 – 2009-10-27 18:10:20

3

这是因为你正在尝试做NULL上的计数。我认为,如果你检查邮件选项卡,你可能有一个消息,有说NULL values eliminated from aggregate

你必须改变什么,你都指望

Select Count (1) FROM Person WHERE BirthDate IS NULL

Select Count (*) FROM Person WHERE BirthDate IS NULL

Select Count (1/0) FROM Person WHERE BirthDate IS NULL

领域

Select Count ('duh') FROM Person WHERE BirthDate IS NULL /* some non null string*/

+0

1/0的优点。它是否工作? ;-)在EXISTS中,是的,但我没有尝试过这样(并不能只是现在) – gbn 2009-10-27 18:15:01

+0

它确实有效.. – 2009-10-27 18:39:27

+0

试过了。有用。奇怪的。 – 2009-10-27 19:51:15