可以使用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;