可以使用SQL按日期排序,但将空日期放在结果集的后面吗?

时间:2020-03-06 14:54:06  来源:igfitidea点击:

我在MySQL数据库中有一堆任务,其中一个字段是"截止日期"。并非每个任务都必须在截止日期之前完成。

我想使用SQL按截止日期对任务进行排序,但是将没有截止日期的任务放在结果集中。现在,首先显示空日期,然后按最早到最晚的截止日期对其余日期进行排序。

关于如何单独使用SQL进行操作的任何想法? (如果需要,我可以使用PHP来做到这一点,但是仅使用SQL的解决方案就可以了。)

谢谢!

解决方案

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子句。第一个将所有非null放在前面,然后按到期日排序

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

这是仅使用标准SQL而不使用ISNULL()的解决方案。该功能不是标准的SQL,并且可能不适用于其他品牌的RDBMS。

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