sql - ORDER BY 递减日期月,日和年

我只需要一个日期列表与最新的日期在顶部,使用order by DESC无法按照希望的方式工作。


SELECT *
FROM vw_view
ORDER BY EventDate DESC

它提供按月和日排序的日期,但不考虑年,例如:


12/31/2009 

12/31/2008

12/30/2009

12/29/2009

需要:


12/31/2009

12/30/2009

12/29/2009

12/28/2009

时间:

我想EventDate是一个char或varchar,而不是一个日期,否则你的ORDER BY子句是正确的。

您可以使用CONVERT将值更改为日期并按该日期排序


SELECT * 
FROM 
 vw_view 
ORDER BY 
 CONVERT(DateTime, EventDate,101) DESC

WHERE IsDate(EventDate) = 1

比如,


ORDER BY 
 CASE
 WHEN IsDate(EventDate) = 1 THEN CONVERT(DateTime, EventDate,101)
 ELSE null
 END DESC

尝试以下方法:


ORDER BY MONTH(Date),DAY(DATE)


ORDER BY YEAR(Date) DESC, MONTH(Date) DESC, DAY(DATE) DESC

字段 EventDate的类型是什么,因为排序不正确,我假设你没有将它设置为表示类型的日期/时间,而是字符串。 然后,写日期的美国方式很难排序

字符串中包含字段,因此需要将它转换为datetime,


order by CONVERT(datetime, EventDate ) desc

可能使用以下命令


SELECT *
FROM vw_view
ORDER BY SUBSTR(EventDate,6,4) + SUBSTR(EventDate, 0, 5) DESC

假设你有能力更改架构,这个问题的唯一可以接受的答案是将基本数据类型更改为更合适的( 比如 ) 。 date 如果 SQL Server 2008 ) 。

将日期存储为 mm/dd/yyyy 字符串是空间低效,难以正确验证,并使得排序和日期计算不必要的痛苦。

...