按日期时间排序,最后 00:00:00

mxm*_*ile 3 sql-server order-by t-sql

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
Run Code Online (Sandbox Code Playgroud)

如何对数据进行排序,以便 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
Run Code Online (Sandbox Code Playgroud)

愚蠢的业务规则,我知道我知道......基本上如果“用户”没有指定时间,时间无关紧要(所以它排在列表的底部)。

Aar*_*and 7

首先按日期排序,然后将时间戳不是午夜的值优先于它所在的值。

ORDER BY CONVERT(DATE, col),
  CASE WHEN CONVERT(DATE,col) = col     
  THEN 2 ELSE 1 END,
  CONVERT(TIME, col);
Run Code Online (Sandbox Code Playgroud)


ype*_*eᵀᴹ 5

其它的办法:

ORDER BY 
    CASE WHEN CONVERT(DATE, col) = col
        THEN DATEADD(day, 1, col) 
        ELSE col
    END ;
Run Code Online (Sandbox Code Playgroud)