按降序排列 – 月,日,年

这看起来很愚蠢,但我只需要一个date列表,以最近的date排在最前面。 使用order by DESC似乎没有按照我希望的方式工作。

 SELECT * FROM vw_view ORDER BY EventDate DESC 

它给了我月份和datesorting的date,但不考虑年份。 例如:

 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是一个字符或varchar,而不是一个date,否则你的命令的子句将罚款。

您可以使用CONVERT将值更改为date并按此sorting

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

问题是,正如Sparky在注释中指出的那样,如果EventDate的值不能转换为date,查询将不会执行。

这意味着你应该排除坏行或让坏行进入结果的底部

要排除坏行,只需添加WHERE IsDate(EventDate) = 1

让不好的date到底,你需要使用CASE

例如

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

尝试:

 ORDER BY MONTH(Date),DAY(DATE) 

编辑 (匿名用户)

我相信这个post是完成的,但是这个用户上面已经解决了我的问题超过所有其他的东西。

如果有其他解决scheme有问题,请尝试使用上述代码的小模块。

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

这是我最后的方法,它在JET DB上完美运行。

PS。 我希望没有人使用Date作为他们的字段名称;-)

你有一个string的字段,所以你需要将其转换为date时间

 order by CONVERT(datetime, EventDate ) desc 

什么是EventDate字段的types,因为sorting是不正确的我假设你没有将它设置为一些date/时间表示types,但一个string。 然后美国人写date的方式是讨厌的sorting

如果您将date格式重新设置为YYYY / MM / DD,则可以使用此简单stringsorting来实现您需要的格式。

或者,使用SUBSTR(store_name,start,length)命令,您应该能够将sorting项重构为上述格式

也许使用以下内容

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

假设您有权更改模式,这是这个问题的唯一可接受的答案,IMO将基础数据types更改为更合适的内容(例如,如果SQL Server 2008为date )。

将date存储为mm/dd/yyyystring是空间效率低下,难以正确validation,并使sorting和date计算不必要的痛苦。