Почему последние значения NULL для заказа SQL сохраняются?

Это, по-видимому, приведет к пустым значениям myDate в нижней части набора результатов. Какова логика того, как это выполняется?

SELECT * FROM myTable
WHERE ...
ORDER BY CASE WHEN myDate IS NULL THEN 1 ELSE 0 END, myDate;

Ответ 1

Это ваш order by:

ORDER BY (CASE WHEN myDate IS NULL THEN 1 ELSE 0 END),
          myDate

Первое выражение для порядка: "Дайте значению NULL значение 1 (для сортировки) и не NULL значений значение 0". Ну, вы сортируете в порядке возрастания, поэтому значения NULL продолжаются.

Если вы хотите их сначала, используйте desc:

ORDER BY (CASE WHEN myDate IS NULL THEN 1 ELSE 0 END) DESC,
          myDate

Ответ 2

ORDER BY CASE WHEN myDate IS NULL THEN 1 ELSE 0 END, myDate;

Когда myDate равно null, выражение возвращает 1. В противном случае оно вернет 0. 1 больше 0, поэтому при упорядочении по результату этого выражения в порядке возрастания (по умолчанию) значения null перемещаются до конца.