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


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

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

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

спасибо!

3 51

3 ответа:

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

SELECT * FROM myTable
WHERE ...
ORDER BY CASE WHEN myDate IS NULL THEN 1 ELSE 0 END, myDate;
SELECT * FROM myTable
WHERE ...
ORDER BY ISNULL(myDate), myDate
SELECT foo, bar, due_date FROM tablename
ORDER BY CASE ISNULL(due_date, 0)
WHEN 0 THEN 1 ELSE 0 END, due_date

таким образом, у вас есть 2 предложения order by. Первый ставит все не-нули впереди, а затем сортирует по срокам после этого