0

我想按两个日期排序,startdateenddate,任何一个都可以为空。

  1. 我想先按开始日期订购,然后按结束日期订购。
  2. 如果结束日期为空,我根本不想按此订购。
  3. 所有结束日期为空的开始日期都在所有结束日期的开始日期之前。
  4. 如果开始日期为空,我希望这些条目位于列表的最后。(空开始日期将具有与之关联的空结束日期。)
4

2 回答 2

2

这个 ORDER BY 子句应该这样做:

ORDER BY 
  CASE WHEN startdate IS NULL THEN 1 ELSE 0 END,
  startdate,
  CASE WHEN enddate IS NULL THEN 0 ELSE 1 END,
  enddate 

根据您的 DBMS,可能有更简单的方法来执行此操作,但不一定是可移植的。

于 2012-12-31T23:35:42.507 回答
2

如果您的数据库是 Oracle,那么您可以编写:

SELECT startdate, enddate
FROM yourtable
ORDER by startdate NULLS LAST, enddate NULLS FIRST;
于 2012-12-31T23:35:48.047 回答