Проверка на NULL и пустую строку в SQL Server: решение
Быстрый ответ
WHERE column_name > '' /* Профессиональный совет: так, ни NULL, ни '' не пройдут эту проверку ☝️ */
Это условие учитывает, что значения NULL
и пустые строки ''
не соответствуют критерию >
.
Интерпретация пустых строк
В SQL Server пустая строка и строка, состоящая только из пробелов, рассматриваются как разные значения. Чтобы отфильтровать и то, и другое, используйте функцию DATALENGTH
:
WHERE column_name <> '' AND column_name IS NOT NULL AND DATALENGTH(column_name) > 0 /* Страхуемся от пустых значений */
Борьба с незаметными пробелами
Чтобы контролировать наличие незаметных пробелов, примените функции LTRIM
и RTRIM
:
WHERE LTRIM(RTRIM(column_name)) <> '' AND column_name IS NOT NULL /* Выступаем вперед пробелов */
Когда NULL становится странным
Используйте трюк: превращение пустых строк в NULL
с помощью NULLIF(column_name, '')
. Это позволит отфильтровать все, кроме значащих данных:
WHERE NULLIF(column_name, '') IS NOT NULL /* Как по волшебству */
Справляемся с NULL и пустыми строками
Функция COALESCE
поможет обойти NULL
, установив значение по умолчанию:
WHERE COALESCE(column_name, 'значение по умолчанию') <> 'значение по умолчанию' /* Мастерский обход */
Допускаем, что 'значение по умолчанию' реально не встречается в данных.
Рассуждения о производительности
Важно учитывать производительность при использовании LEN
, DATALENGTH
, LTRIM
и RTRIM
, так как это может повлиять на скорость исполнения запросов с большим объемом данных.
Визуализация
Представьте себе кулинарную полку с банками для специй: 🧂, EMPTY, 🌶️, NULL, 🧄.
Каждая из этих банок символизирует запись в базе данных.
🧂: Полная --> Полезная
EMPTY: Пустая --> Пропустим
🌶️: Полная --> Полезная
NULL: Отсутствует --> Пропустим
🧄: Полная --> Полезная
Стоит ли ожидать сложностей и принимать меры предосторожности?
Данные могут быть разными, поэтому всегда помните о возможных особых случаях:
- Поля из одного символа: это условие подойдет, если поле может содержать максимум один символ.
- Кодировка символов:
DATALENGTH
зависит от кодировки, так как она определяет количество байт. - Тестирование: перед тем как использовать запрос, важно всё тщательно проверить, например, на платформе SQL Fiddle.
Выбираем правильный способ
В зависимости от объема данных и требований к производительности выберите наиболее подходящий метод:
- Простота:
column_name > ''
— простой и эффективный способ. - Строгость:
LTRIM
,RTRIM
помогут избавиться от пробелов. - Работа с данными, не являющимися текстом:
DATALENGTH
лучшеLEN
для работы с бинарными данными.