这看起来很愚蠢,但是,我只需要一个要排序的日期列表,其中最近的日期位于顶部。使用 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
问题在于,正如 Sparky 在评论中指出的那样,如果 EventDate 的值无法转换为日期,则查询将不会执行。
这意味着您应该排除坏行或让坏行位于结果的底部
要排除坏行,只需添加 WHERE IsDate(EventDate) = 1
要让糟糕的日期归到底部,您需要使用CASE
例如
ORDER BY
CASE
WHEN IsDate(EventDate) = 1 THEN CONVERT(DateTime, EventDate,101)
ELSE null
END DESC
关于sql - 按日期降序排列 - 月、日、年,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4676139/