ORDER BY 2可能为NULL的值

时间:2012-12-31 23:31:03

标签: sql sql-order-by

我想按两个日期排序, startdate enddate ,其中一个可能为null。

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

2 个答案:

答案 0 :(得分: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,可能有更简单的方法,但不一定是可移植的。

答案 1 :(得分:2)

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

SELECT startdate, enddate
FROM yourtable
ORDER by startdate NULLS LAST, enddate NULLS FIRST;
相关问题