2009-10-27 51 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