2009-05-20 2 views
0

Ich habe eine Tabelle sagen T in SQL Server 2005-Datenbank und es hat zwei Spalten sagen A und B, die mehr als oft nicht irgendwelche Werte in ihnen haben. Wie überprüft man, ob A und B leer sind (hat alle Nulllänge Zeichenfolgen) oder nicht?Gibt es bessere Möglichkeiten festzustellen, ob eine Spalte in einer Tabelle leer ist oder nicht?

Ich habe diese naive Art und Weise, es zu tun -

select count(*) as A_count from T where A <> '' 

der Datentyp varchar Nehmen wir an, hat.

Ich frage mich, ob ich die gleichen Informationen mit einer Systemtabelle erhalten kann, und wenn ja, wäre das schneller als diese Abfrage?

prost

+0

Es ist eine Schande, dass Sie nicht Oracle verwenden - Bitmap-Indizes sind für diese Art von Sache groß. – RichardOD

Antwort

0

Wenn Ihre Spalte NULL-Werte zulässt, müssen Sie Ihre Abfrage wie folgt ändern:

select count (*) als A_count von T, wobei COALESCE (A, '') <> ''

sonst du wirst Nullen nicht zählen.

2

Ihre Methode ist im wesentlichen korrekt, auch wenn die Formulierung in Ihrer Frage ungenau ist. Enthält Leerwert NULL oder eine leere Zeichenfolge ungleich Null?

Sie könnten die Fälle mit Griff:

select count(*) as A_count from T where isnull(rtrim(ltrim(A)), '') <> '' 

Stellen Sie außerdem sicher, dass ein Index auf Spalte A gibt es

0

Wenn wir reden über leere Zeichenfolgen, dann ist dies die Art und Weise, ich würde es tun:

select count(*) as A_count from T where LEN(A) > 0 

beachten Sie jedoch, dass, wenn ein null sein könnte, dann werden diese Zeilen nicht durch entweder LEN (A) gefangen werden> 0 oder LEN (A) = 0, und dass Sie Ich muss ein I einpacken SNULL um A in diesem Fall.

Verwandte Themen