Сортировка NULL-значений в SQL Server: аналог Oracle's NULLS FIRST
Быстрый ответ
Чтобы значения NULL
отображались в начале списка после сортировки в SQL Server, вы можете использовать конструкцию CASE
в предложении ORDER BY
. Пример:
SELECT * FROM YourTable
ORDER BY CASE WHEN YourColumn IS NULL THEN 0 ELSE 1 END, YourColumn;
Этот запрос позиционирует NULL
значения на верхних позициях списка путем присвоения им более низкого приоритетного значения (0
) по сравнению с ненулевыми значениями (1
), в результате чего они получают приоритет при сортировке по возрастанию.
Обратная сортировка – сортировка по убыванию
Иногда возникает необходимость отсортировать данные по убыванию, однако значения NULL
должны оставаться в начале списка. В этом случае необходимо просто скорректировать числовые приоритеты:
SELECT * FROM YourTable
ORDER BY CASE WHEN YourColumn IS NULL THEN 0 ELSE 1 END, YourColumn DESC;
Здесь значения NULL
все еще занимают самые верхние позиции, а остальные данные упорядочиваются в порядке убывания, как звезды, опоздавшие на красную дорожку.
Дополнительные уловки
Волшебная функция ISNULL
Если вы считаете конструкцию CASE
немного сложной, функция ISNULL()
поможет вам просто и эффективно отсортировать значения:
SELECT * FROM YourTable
ORDER BY ISNULL(YourColumn, 'AReallyLowValue'), YourColumn;
Совет: для 'AReallyLowValue' выберите значение, которое гарантированно будет меньше всех ваших данных.
Сортировка недатированных значений
Следующий подход подойдет для текстовых или числовых колонок:
ORDER BY CASE WHEN YourColumn IS NULL THEN 0 ELSE 1 END, YourColumn DESC;
При работе с датами можно воспользоваться следующей схемой:
ORDER BY CASE WHEN YourDateColumn IS NULL THEN '19000101' ELSE YourDateColumn END;
Профессиональный совет: '19000101' является способом отобразить NULL
-даты как самые ранние, а значит наиболее приоритетные при сортировке.
Визуализация
Представьте себе список приглашенных на VIP-вечеринку, где NULL
– это ваши специальные гости:
До сортировки: [Том, Джерри, NULL, Бэтмен, Человек-паук]
После сортировки аналогично Oracle's NULLS FIRST в SQL Server:
NULL (🌟 особый гость) ➡️ Бэтмен ➡️ Джерри ➡️ Человек-паук ➡️ Том
Так NULL
(🌟) занимает первые места в списке, как звезды.
Настройка оператора CASE
Естественное поведение SQL Server
По умолчанию SQL Server считает NULL
значения менее значимыми при сортировке по возрастанию и наиболее значимыми при сортировке по убыванию. Это поведение можно изменить с помощью CASE
:
-- 'Последними? Не может быть!' – подумает NULL
ORDER BY CASE WHEN YourColumn IS NULL THEN 1 ELSE 0 END, YourColumn;
-- 'Первыми? Это мы!' – подумает NULL при сортировке по убыванию
ORDER BY CASE WHEN YourColumn IS NULL THEN 1 ELSE 0 END, YourColumn DESC;
Ваш выбор! Сортировка в порядке возрастания или убывания
SQL дает вам возможность выбрать направление сортировки – по возрастанию или по убыванию. Достаточно просто настроить логику CASE WHEN
и SQL выполнит ваше желание.
Пользовательское упорядочивание
Поскольку SQL Server не предоставляет встроенный функционал NULLS FIRST | LAST
как Oracle, использование CASE WHEN
является универсальным инструментом для создания пользовательских последовательностей сортировки.
Важность контекста данных
Выбирая между CASE
и ISNULL
, учитывайте контекст данных: их уникальность, целостность и лучшие практики наименования.
Полезные материалы
- SQL Server: ORDER BY Clause — Подробности использования команды
ORDER BY
для SQL Server. - CASE (Transact-SQL) – SQL Server — Официальное руководство Microsoft по работе с
CASE
. - Automating Transaction Log Backups for All SQL Server Databases — Подробности автоматизации резервного копирования в SQL Server.
- Order By Clause With NULL Values In SQL Server — Работа с
NULL
значениями в SQL Server в контексте сортировки.