Тестирование пробелов в SQL Server

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

я пытался

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

АГА! Оказывается, я неправильно тестировал null. Спасибо.

ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
6
0
17 535
8
Перейти к ответу Данный вопрос помечен как решенный

Ответы 8

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

Обрезка необходима только при измерении вводимых значений, где пробелы не нужны. В противном случае len () все это перехватит.

ProfK 03.04.2013 13:40
(LTRIM(RTRIM(@Value))=''

должен сделать свое дело.

Ответ принят как подходящий

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

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

--Instead of    

SELECT *
FROM MY_TABLE
WHERE SOME_FIELD = NULL;

Или ВЫКЛЮЧИТЕ ANSI NULLS - я бы предпочел следовать спецификации SQL-92 tho ', а us IS NULL

stephbu 08.12.2008 21:37

Возможно, чего-то не хватает, но это вообще не исправляет способ проверки пробелов. Он исправляет синтаксис проверки на null, но вопрос не об этом.

Robert Noack 26.08.2013 20:06

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

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

где length (rtrim (ltrim (yourcolumnname))) = 0 ИЛИ yourcolumnname имеет значение null

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

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

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

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

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

Как оказалось, вам не нужно обрезать значение, потому что SQL Server игнорирует конечные пробелы, поэтому все, что вам действительно нужно, это: ВЫБРАТЬ * ОТ TableA ГДЕ LEN (Val)> 0

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

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

Другие вопросы по теме