Проверка на 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для работы с бинарными данными.