这看起来很愚蠢但是,我只需要一个日期列表,以最近的日期排在最前面.使用order by DESC似乎没有按照我想要的方式工作.
SELECT *
FROM vw_view
ORDER BY EventDate DESC
Run Code Online (Sandbox Code Playgroud)
它给出了按月和日排序的日期,但不考虑年份.例如:
12/31/2009
12/31/2008
12/30/2009
12/29/2009
Run Code Online (Sandbox Code Playgroud)
需要更像:
12/31/2009
12/30/2009
12/29/2009
12/28/2009
Run Code Online (Sandbox Code Playgroud)
等等.
Con*_*rix 63
我猜EventDate是char或varchar,而不是日期,否则你的order by子句会好的.
您可以使用CONVERT将值更改为日期并按此排序
SELECT *
FROM
vw_view
ORDER BY
CONVERT(DateTime, EventDate,101) DESC
Run Code Online (Sandbox Code Playgroud)
问题是,正如Sparky在注释中指出的那样,如果EventDate具有无法转换为日期的值,则查询将不会执行.
这意味着您应该排除坏行或让坏行转到结果的底部
要排除坏行,只需添加即可 WHERE IsDate(EventDate) = 1
要让坏日期到底,你需要使用 CASE
例如
ORDER BY
CASE
WHEN IsDate(EventDate) = 1 THEN CONVERT(DateTime, EventDate,101)
ELSE null
END DESC
Run Code Online (Sandbox Code Playgroud)
小智 19
尝试:
__PRE__
编辑(由匿名用户.)
我相信这篇文章已经完成,但是上面的这个用户已经找到了解决我的问题的东西.
如果有人遇到其他解决方案的问题,请尝试上面代码的一个小模块.
__PRE__
这是我最后的方法,它在JET DB上完美运行.
PS.我希望没有人真正使用ORDER BY MONTH(Date),DAY(DATE)他们的字段名;-)
您在字符串中有字段,因此您需要将其转换为日期时间
order by CONVERT(datetime, EventDate ) desc
Run Code Online (Sandbox Code Playgroud)
假设您有能力更改架构,对于这个问题,IMO 唯一可接受的答案是将基本数据类型更改为更合适的类型(例如,date如果是 SQL Server 2008)。
将日期存储为mm/dd/yyyy字符串空间效率低下,难以正确验证,并使排序和日期计算不必要地痛苦。
| 归档时间: |
|
| 查看次数: |
359811 次 |
| 最近记录: |