2008-12-08 4 views
6

У меня есть несколько пустых значений в моей таблице, и я не могу их поймать в инструкции IF.Тестирование пробелов в SQL Server

Я попытался

IF @value = '' и if @value = NULL и ни один ловит пустые значения. Есть ли способ проверить, является ли varchar полностью пробелом?

AHA! Оказывается, я тестировал ошибку. Благодарю.

ответ

8

Для сравнения с NULL, используйте IS . NULL ключевое слово

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

--Instead of  

SELECT * 
FROM MY_TABLE 
WHERE SOME_FIELD = NULL; 
+0

Или SET ANSI NULLS OFF - я бы предпочел следовать спецификации SQL-92 spec'o и us IS NULL – stephbu 2008-12-08 18:37:00

+1

Возможно, что-то не хватает, но это не совсем исправляет способ тестирования для пробелов. Он корректирует синтаксис проверки на null, но это НЕ то, о чем спрашивал вопрос. – 2013-08-26 16:06:51

3

, если длина (@value) = 0 или @value является нулевым

+0

Обрезка необходима только при вводе значений значений, где пробелы не требуются. В противном случае len() поймает все это. – ProfK 2013-04-03 09:40:05

3

(LTRIM (RTRIM (@value)) = '' следует сделать трюк.

0

вы можете иметь поля с несколькими пробелами (»«), так что вы получите лучшие результаты, если подрезать, что:

where ltrim(yourcolumnname) = '' 
2

где длина (RTRIM (LTRIM (yourcolumnname))) = 0 ИЛИ yourcolumnname является нулевым

1

Я просто сделал некоторые тесты, и выяснили, что-то интересное. я писал свои запросы так:

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

Но, на самом деле не нужно проверять нуль, все, что вам нужно сделать, это проверить длину после обрезки значения.

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

Этот выбор сорняков нулей, а также любых столбцов с просто пробелом.

Как выясняется, что вам не нужно, чтобы урезать значение, поскольку SQL Server игнорирует конечные пробелы, поэтому все, что вам на самом деле нужно это: SELECT * FROM TableA ГДЕ LEN (Val)> 0

2

Вместо того, чтобы выполнять чрезмерную манипуляцию строк с помощью LTRIM И RTRIM, просто выполните поиск выражения для первого «не-пространства».

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