Тестирование для пробелов в SQL Server - PullRequest
6 голосов
/ 08 декабря 2008

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

Я пробовал

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

AHA! Оказывается, я проверял на ноль неправильно. Благодарю.

Ответы [ 8 ]

11 голосов
/ 08 декабря 2008
ltrim(rtrim(isNull(@value,''))) = ''
8 голосов
/ 08 декабря 2008

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

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

--Instead of    

SELECT *
FROM MY_TABLE
WHERE SOME_FIELD = NULL;
3 голосов
/ 08 декабря 2008

(LTRIM (RTRIM (@Value)) = '' должно сработать.

3 голосов
/ 08 декабря 2008

если длина (@value) = 0 или @value равна нулю

2 голосов
/ 20 октября 2014

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

SELECT
            *
    FROM
            [Table]
    WHERE
            COALESCE(PATINDEX('%[^ ]%', [Value]), 0) > 0
2 голосов
/ 09 декабря 2008

где длина (rtrim (ltrim (ваше имя столбца))) = 0 ИЛИ ваше имя столбца равно нулю

1 голос
/ 09 мая 2013

Я только что провёл тестирование и обнаружил кое-что интересное. Я писал свои запросы так:

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 игнорирует конечные пробелы, поэтому все, что вам на самом деле нужно, это: ВЫБРАТЬ * ИЗ таблицы А ГДЕ ЛЕН (Val)> 0

0 голосов
/ 08 декабря 2008

У вас могут быть поля с несколькими пробелами (''), поэтому вы получите лучшие результаты, если урежете это:

where ltrim(yourcolumnname) = ''
...