2008-12-08 5 views
6

Ich habe einige leere Werte in meiner Tabelle, und ich kann nicht scheinen, sie in einer IF-Anweisung zu fangen.Testen für Leerzeichen in SQL Server

Ich habe

versucht

IF @value = '' und if @value = NULL und keiner fängt die Leerwerte. Gibt es eine Möglichkeit zu testen, ob ein Varchar vollständig Leerzeichen ist?

AHA! Es stellte sich heraus, dass ich auf Null falsch getestet habe. Vielen Dank.

Antwort

8

mit NULL zu vergleichen, die IS verwenden . NULL Stichwort

--Generic example: 
SELECT * 
FROM MY_TABLE 
WHERE SOME_FIELD IS NULL; 

--Instead of  

SELECT * 
FROM MY_TABLE 
WHERE SOME_FIELD = NULL; 
+0

Oder SET ANSI NULL OFF - Ich würde es vorziehen, die SQL-92-Spezifikation tho 'und uns IS NULL – stephbu

+1

Vielleicht etwas fehlt, aber dies korrigiert nicht die Art des Tests für Leerzeichen überhaupt. Es korrigiert die Syntax der Überprüfung auf Null, aber das ist NICHT, was die Frage verlangte. –

3

, wenn die Länge (@value) = 0 oder @value null ist

+0

Trimmen ist nur bei Eingabe von Messwerten notwendig, wo Leerräume nicht erwünscht sind. Sonst fängt len ​​() alles ab. – ProfK

3

(LTRIM (RTRIM (@Value)) = '' sollte es tun.

0

Sie haben Felder mit mehreren Leerzeichen (‘‚) so dass Sie bessere Ergebnisse, wenn Sie trimmen, dass:

where ltrim(yourcolumnname) = '' 
10
ltrim(rtrim(isNull(@value,''))) = '' 
2

wo Länge (rtrim (ltrim (yourcolumnname))) = 0 oder yourcolumnname null ist

1

ich nur einige Tests tat, und fand heraus, etwas Interessantes. Früher habe ich meine Abfragen zu schreiben, wie so:

SELECT * 
FROM TableA 
WHERE Val IS NOT NULL 
AND LEN(RTRIM(LTRIM(Val))) > 0 

Aber Sie brauchen nicht wirklich für null zu überprüfen, alles, was Sie tun müssen, ist die Länge zu überprüfen, nachdem der Wert trimmen.

SELECT * 
FROM TableA 
WHERE LEN(RTRIM(LTRIM(Val))) > 0 

Diese wählen Unkräuter aus, ebenso wie Spalten mit nur Leerraum.

Wie sich herausstellt, brauchen Sie nicht den Wert zu trimmen, da SQL Server ignoriert nachfolgende Leerzeichen, so alles, was Sie brauchen es eigentlich diese: SELECT * FROM TableA WHERE LEN (Val)> 0

+0

Sie haben Recht. SELECT LEN ('') gibt 0 zurück – Freshblood

2

Anstatt übermäßige Zeichenfolgenmanipulation mit LTRIM AND RTRIM durchzuführen, suchen Sie einfach den Ausdruck nach dem ersten "Nicht-Leerzeichen".

SELECT 
      * 
    FROM 
      [Table] 
    WHERE 
      COALESCE(PATINDEX('%[^ ]%', [Value]), 0) > 0