Можно использовать SQL для сортировки по дате, но поставить нулевые даты в конце набора результатов? - PullRequest
52 голосов
/ 30 сентября 2008

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

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

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

Спасибо!

Ответы [ 3 ]

66 голосов
/ 30 сентября 2008

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

SELECT * FROM myTable
WHERE ...
ORDER BY CASE WHEN myDate IS NULL THEN 1 ELSE 0 END, myDate;
29 голосов
/ 30 сентября 2008
SELECT * FROM myTable
WHERE ...
ORDER BY ISNULL(myDate), myDate
4 голосов
/ 30 сентября 2008
SELECT foo, bar, due_date FROM tablename
ORDER BY CASE ISNULL(due_date, 0)
WHEN 0 THEN 1 ELSE 0 END, due_date

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...