Sql-Server

按日期時間排序,最後 00:00:00

  • January 4, 2016

order by datetimecolumn訂購這樣的datetime列:

datetimecolumn   
2014-09-04 00:00:00
2014-09-04 00:00:00
2014-09-04 01:00:00
2014-09-05 00:00:00
2014-09-05 01:00:00
2014-09-05 02:00:00

如何對數據進行排序,使 00:00:00 的值排在最後,但仍按時間升序排列值,如下所示:

datetimecolumn    
2014-09-04 01:00:00
2014-09-04 00:00:00
2014-09-04 00:00:00
2014-09-05 01:00:00
2014-09-05 02:00:00
2014-09-05 00:00:00

愚蠢的商業規則,我知道我知道……基本上如果“使用者”沒有指定時間,時間並不重要(所以它排在列表的底部)。

首先僅按日期排序,然後將時間戳不是午夜的值優先於那些時間戳。

ORDER BY CONVERT(DATE, col),
 CASE WHEN CONVERT(DATE,col) = col     
 THEN 2 ELSE 1 END,
 CONVERT(TIME, col);

另一種方式:

ORDER BY 
   CASE WHEN CONVERT(DATE, col) = col
       THEN DATEADD(day, 1, col) 
       ELSE col
   END ;

引用自:https://dba.stackexchange.com/questions/121370