2009-10-27 11 views
10

Ich versuche, die Anzahl der Datensätze zu zählen, die einen Null DateTime-Wert haben. Aus irgendeinem Grund sind meine Versuche jedoch gescheitert. Ich habe die folgenden zwei Abfragen ohne Erfolg versucht:SQL Server 2005 - Überprüfen auf Null DateTime Wert

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

und

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

Was mache ich falsch? Ich kann Datensätze mit einem BirthDate von NULL anzeigen, wenn ich alle Datensätze abfrage.

Antwort

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

try this

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

Sie müssen "IS NULL" nicht verwenden "= NULL"

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

w Hy leere Zeichenfolge? – Fredou

+0

Die Verwendung der leeren Zeichenfolge belastet die Datenbank weniger, da keine Daten abgerufen werden, sondern nur eine leere Zeichenfolge. – MattB

+3

Aber ich verstehe, dass COUNT (*) auch nichts lädt. Es zählt nur eine Basiszählung. Zumindest in modernen SQL Server-Instanzen. –

3

Dies passiert, weil Sie versuchen, ein COUNT auf NULL zu tun. Ich denke, dass, wenn Sie auf die Registerkarte Nachrichten überprüfen, können Sie eine Nachricht haben kann sagen NULL values eliminated from aggregate

Was müssen Sie ändern das Feld, das Sie

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

zählen

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

+0

Guter Punkt mit 1/0. Funktioniert es aber? ;-) In EXISTS, ja, aber ich habe es nicht so ausprobiert (und kann nicht gerade jetzt) ​​ – gbn

+0

es funktioniert sicher .. –

+0

habe es versucht. Es klappt. Seltsam. –