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

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

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

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

谢谢!

asked 2020-01-13T20:08:55Z
4个解决方案
67 votes

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

SELECT * FROM myTable
WHERE ...
ORDER BY CASE WHEN myDate IS NULL THEN 1 ELSE 0 END, myDate;
Bill Karwin answered 2020-01-13T20:09:19Z
29 votes
SELECT * FROM myTable
WHERE ...
ORDER BY ISNULL(myDate), myDate
nickf answered 2020-01-13T20:09:35Z
4 votes
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放在前面,然后按到期日排序

Danimal answered 2020-01-13T20:09:55Z
0 votes

最简单的方法是对DESC使用减号运算符。

SELECT * FROM request ORDER BY -date DESC

在MySQL中,NULL值被认为比任何非NULL值都低,因此,按升序(ASC)排序的NULL首先列出,如果降序(DESC),则最后列出它们。

当在列名之前添加-(减号)时,NULL变为-NULL。

由于-NULL == NULL,因此添加DESC可使所有行按日期升序排列,最后再按NULL。

samson teoh answered 2020-01-13T20:10:33Z
translate from https://stackoverflow.com:/questions/151195/possible-to-use-sql-to-sort-by-date-but-put-null-dates-at-the-back-of-the-result