Можно использовать SQL для сортировки по дате, но введите нулевые даты в конце набора результатов?

У меня есть множество задач в базе данных MySQL, а одно из полей - "крайняя дата". Не каждая задача должна иметь крайний срок.

Я хотел бы использовать SQL для сортировки задач по дате окончания, но поставьте те, у которых нет даты окончания в результирующем наборе. Как и сейчас, сначала отображаются нулевые даты, затем остальные сортируются по крайним срокам, начиная с самого последнего.

Любые идеи о том, как это сделать с помощью SQL? (Я могу сделать это с PHP, если это необходимо, но решение SQL-only было бы отлично.)

Спасибо!

Ответ 1

Здесь используется решение, использующее только стандартный SQL, а не ISNULL(). Эта функция не является стандартным SQL и может не работать с другими брендами РСУБД.

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

Ответ 2

SELECT * FROM myTable
WHERE ...
ORDER BY ISNULL(myDate), myDate

Ответ 3

SELECT foo, bar, due_date FROM tablename
ORDER BY CASE ISNULL(due_date, 0)
WHEN 0 THEN 1 ELSE 0 END, due_date

Итак, у вас есть 2 порядка по предложениям. Первый помещает все ненулевые значения спереди, затем сортирует по дате после этого