这看起来很愚蠢但是,我只需要一个日期列表,以最近的日期排在最前面。使用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
等等。
答案 0 :(得分:63)
我猜EventDate
是char或varchar而不是日期,否则你的order by子句会没问题。
您可以使用CONVERT将值更改为日期并按该
排序SELECT *
FROM
vw_view
ORDER BY
CONVERT(DateTime, EventDate,101) DESC
问题在于,正如Sparky在评论中指出的那样,如果EventDate具有无法转换为日期的值,则查询将不会执行。
这意味着您应该排除坏行或让坏行转到结果的底部
要排除错误的行,只需添加WHERE IsDate(EventDate) = 1
要让错误的日期到达底部,您需要使用CASE
e.g。
ORDER BY
CASE
WHEN IsDate(EventDate) = 1 THEN CONVERT(DateTime, EventDate,101)
ELSE null
END DESC
答案 1 :(得分:19)
尝试:
ORDER BY MONTH(Date),DAY(DATE)
编辑(由匿名用户提供。)
我相信这篇文章已经完成了,但是上面的这个用户已经找到了解决我的问题的问题。
如果有人遇到其他解决方案的问题,请尝试使用上述代码的一小段内容。
ORDER BY YEAR(Date) DESC, MONTH(Date) DESC, DAY(DATE) DESC
这是我最后的方法,它在JET DB上完美运行。
PS。我希望没有人真正使用Date
作为他们的字段名; - )
答案 2 :(得分:6)
字段中包含字段,因此您需要将其转换为日期时间
order by CONVERT(datetime, EventDate ) desc
答案 3 :(得分:4)
字段EventDate
的类型是什么,因为排序不正确我假设您没有将其设置为某个日期/时间表示类型,而是字符串。然后美国人写日期的方式很难排序
答案 4 :(得分:3)
如果您将日期格式重新组织为YYYY / MM / DD,那么您可以使用这个简单的字符串排序来实现您需要的格式化。
或者,使用SUBSTR(store_name,start,length)命令,您应该能够将排序术语重组为上述格式
或许使用以下
SELECT *
FROM vw_view
ORDER BY SUBSTR(EventDate,6,4) + SUBSTR(EventDate, 0, 5) DESC
答案 5 :(得分:3)
假设您有权进行架构更改,这个问题唯一可接受的答案IMO是将基础数据类型更改为更合适的方式(例如,如果是SQL Server 2008,则为date
。)
将日期存储为mm/dd/yyyy
字符串是空间效率低下,难以正确验证并使排序和日期计算不必要地痛苦。
答案 6 :(得分:0)
试试这个
SELECT *
FROM vw_view
ORDER BY DATE_FORMAT(EventDate, "%m-%d-%y") DESC