2008-12-08 8 views
6

Mam kilka pustych wartości w mojej tabeli i nie mogę ich złapać w instrukcji IF.Testowanie białych znaków w SQL Server

Próbowałem

IF @value = '' i if @value = NULL i ani jeden łapie puste wartości. Czy istnieje sposób na sprawdzenie, czy varchar jest całkowicie biały?

AHA! Okazuje się, że testowałem pod kątem zerowego błędu. Dzięki.

Odpowiedz

8

Aby porównać z NULL, należy użyć IS . NULL kluczowe

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

--Instead of  

SELECT * 
FROM MY_TABLE 
WHERE SOME_FIELD = NULL; 
+0

Lub USTAW ANSI NULLS OFF - Wolałbym postępować zgodnie ze specyfikacją SQL-92, a my JEST NULL – stephbu

+1

Być może czegoś brakuje, ale to nie poprawia sposobu testowania białych znaków w ogóle. Poprawia składnię sprawdzania wartości null, ale NIE jest to pytanie zadawane. –

3

jeśli długość (@value) = 0 lub @value jest null

+0

Przycinanie jest konieczne tylko przy wprowadzaniu wartości wejściowych, gdy spacja nie jest pożądana. W przeciwnym razie len() łapie to wszystko. – ProfK

3

(LTRIM (RTRIM (@Value)) = '' powinno załatwić sprawę.

0

możesz mieć pól z wielu miejsc (”„), więc można uzyskać lepsze rezultaty, jeśli przyciąć że:

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

gdzie długość (RTRIM (ltrim (yourcolumnname))) = 0 LUB yourcolumnname jest null

1

Właśnie zrobiłem kilka testów, i dowiedział się czegoś ciekawego. Kiedyś pisałem moje pytania tak:

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

Ale w rzeczywistości nie trzeba sprawdzić dla wartości null, wszystko co musisz zrobić, to sprawdzić długość po przycięciu wartość.

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

Ta opcja usuwa puste wartości, a także dowolne kolumny z białą spacją.

Jak się okazuje, nie trzeba przyciąć wartość, ponieważ SQL Server ignoruje końcowe spacje, więc wszystko, czego faktycznie potrzebujesz to: SELECT * FROM TableA GDZIE LEN (Val)> 0

+0

Masz rację. SELECT LEN ('') zwraca 0 – Freshblood

2

Zamiast wykonywać nadmierną manipulację ciągami za pomocą LTRIM i RTRIM, po prostu przeszukaj wyrażenie dla pierwszego "nie-miejsca".

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