Бесплатный вебинар
«как найти любимую работу»
Подарки на 150 000 ₽ за участие
Живой эфир
Записи не будет!
00:00:00:00
дн.ч.мин.сек.

Сортировка NULL-значений в SQL Server: аналог Oracle's NULLS FIRST

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

Чтобы значения NULL отображались в начале списка после сортировки в SQL Server, вы можете использовать конструкцию CASE в предложении ORDER BY. Пример:

SQL
Скопировать код
SELECT * FROM YourTable
ORDER BY CASE WHEN YourColumn IS NULL THEN 0 ELSE 1 END, YourColumn;

Этот запрос позиционирует NULL значения на верхних позициях списка путем присвоения им более низкого приоритетного значения (0) по сравнению с ненулевыми значениями (1), в результате чего они получают приоритет при сортировке по возрастанию.

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

Обратная сортировка – сортировка по убыванию

Иногда возникает необходимость отсортировать данные по убыванию, однако значения NULL должны оставаться в начале списка. В этом случае необходимо просто скорректировать числовые приоритеты:

SQL
Скопировать код
SELECT * FROM YourTable
ORDER BY CASE WHEN YourColumn IS NULL THEN 0 ELSE 1 END, YourColumn DESC;

Здесь значения NULL все еще занимают самые верхние позиции, а остальные данные упорядочиваются в порядке убывания, как звезды, опоздавшие на красную дорожку.

Дополнительные уловки

Волшебная функция ISNULL

Если вы считаете конструкцию CASE немного сложной, функция ISNULL() поможет вам просто и эффективно отсортировать значения:

SQL
Скопировать код
SELECT * FROM YourTable
ORDER BY ISNULL(YourColumn, 'AReallyLowValue'), YourColumn;

Совет: для 'AReallyLowValue' выберите значение, которое гарантированно будет меньше всех ваших данных.

Подробнее об этом расскажет наш спикер на видео
skypro youtube speaker

Сортировка недатированных значений

Следующий подход подойдет для текстовых или числовых колонок:

SQL
Скопировать код
ORDER BY CASE WHEN YourColumn IS NULL THEN 0 ELSE 1 END, YourColumn DESC;

При работе с датами можно воспользоваться следующей схемой:

SQL
Скопировать код
ORDER BY CASE WHEN YourDateColumn IS NULL THEN '19000101' ELSE YourDateColumn END;

Профессиональный совет: '19000101' является способом отобразить NULL-даты как самые ранние, а значит наиболее приоритетные при сортировке.

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

Представьте себе список приглашенных на VIP-вечеринку, где NULL – это ваши специальные гости:

Markdown
Скопировать код
До сортировки: [Том, Джерри, NULL, Бэтмен, Человек-паук]
После сортировки аналогично Oracle's NULLS FIRST в SQL Server:
Markdown
Скопировать код
NULL (🌟 особый гость) ➡️ Бэтмен ➡️ Джерри ➡️ Человек-паук ➡️ Том

Так NULL (🌟) занимает первые места в списке, как звезды.

Настройка оператора CASE

Естественное поведение SQL Server

По умолчанию SQL Server считает NULL значения менее значимыми при сортировке по возрастанию и наиболее значимыми при сортировке по убыванию. Это поведение можно изменить с помощью CASE:

SQL
Скопировать код
-- 'Последними? Не может быть!' – подумает 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, учитывайте контекст данных: их уникальность, целостность и лучшие практики наименования.

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

  1. SQL Server: ORDER BY Clause — Подробности использования команды ORDER BY для SQL Server.
  2. CASE (Transact-SQL) – SQL Server — Официальное руководство Microsoft по работе с CASE.
  3. Automating Transaction Log Backups for All SQL Server Databases — Подробности автоматизации резервного копирования в SQL Server.
  4. Order By Clause With NULL Values In SQL Server — Работа с NULL значениями в SQL Server в контексте сортировки.
Проверь как ты усвоил материалы статьи
Пройди тест и узнай насколько ты лучше других читателей
Как можно отсортировать значения NULL в начале списка в SQL Server?
1 / 5