Проверка на NULL и пустую строку в SQL Server: решение

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

SQL
Скопировать код
WHERE column_name > '' /* Профессиональный совет: так, ни NULL, ни '' не пройдут эту проверку ☝️ */

Это условие учитывает, что значения NULL и пустые строки '' не соответствуют критерию >.

Кинга Идем в IT: пошаговый план для смены профессии

Интерпретация пустых строк

В SQL Server пустая строка и строка, состоящая только из пробелов, рассматриваются как разные значения. Чтобы отфильтровать и то, и другое, используйте функцию DATALENGTH:

SQL
Скопировать код
WHERE column_name <> '' AND column_name IS NOT NULL AND DATALENGTH(column_name) > 0 /* Страхуемся от пустых значений */

Борьба с незаметными пробелами

Чтобы контролировать наличие незаметных пробелов, примените функции LTRIM и RTRIM:

SQL
Скопировать код
WHERE LTRIM(RTRIM(column_name)) <> '' AND column_name IS NOT NULL /* Выступаем вперед пробелов */

Когда NULL становится странным

Используйте трюк: превращение пустых строк в NULL с помощью NULLIF(column_name, ''). Это позволит отфильтровать все, кроме значащих данных:

SQL
Скопировать код
WHERE NULLIF(column_name, '') IS NOT NULL /* Как по волшебству */

Справляемся с NULL и пустыми строками

Функция COALESCE поможет обойти NULL, установив значение по умолчанию:

SQL
Скопировать код
WHERE COALESCE(column_name, 'значение по умолчанию') <> 'значение по умолчанию' /* Мастерский обход */

Допускаем, что 'значение по умолчанию' реально не встречается в данных.

Рассуждения о производительности

Важно учитывать производительность при использовании LEN, DATALENGTH, LTRIM и RTRIM, так как это может повлиять на скорость исполнения запросов с большим объемом данных.

Визуализация

Представьте себе кулинарную полку с банками для специй: 🧂, EMPTY, 🌶️, NULL, 🧄.

Каждая из этих банок символизирует запись в базе данных.

🧂: Полная --> Полезная
EMPTY: Пустая --> Пропустим
🌶️: Полная --> Полезная
NULL: Отсутствует --> Пропустим
🧄: Полная --> Полезная

Стоит ли ожидать сложностей и принимать меры предосторожности?

Данные могут быть разными, поэтому всегда помните о возможных особых случаях:

  • Поля из одного символа: это условие подойдет, если поле может содержать максимум один символ.
  • Кодировка символов: DATALENGTH зависит от кодировки, так как она определяет количество байт.
  • Тестирование: перед тем как использовать запрос, важно всё тщательно проверить, например, на платформе SQL Fiddle.

Выбираем правильный способ

В зависимости от объема данных и требований к производительности выберите наиболее подходящий метод:

  • Простота: column_name > '' — простой и эффективный способ.
  • Строгость: LTRIM, RTRIM помогут избавиться от пробелов.
  • Работа с данными, не являющимися текстом: DATALENGTH лучше LEN для работы с бинарными данными.

Полезные материалы

  1. Обработка значений NULL и пустых строк в SQL
  2. Документация по функции ISNULL от Microsoft
  3. Пояснение функции LEN для пустых строк на w3schools
  4. Руководство по использованию NULLIF для управления NULL на database.guide
  5. Руководство по использованию ISNULL для сравнения с NULL на tutorialgateway.org