sql - 按日期降序排列 - 月、日、年

标签 sql sql-server

这看起来很愚蠢,但是,我只需要一个要排序的日期列表,其中最近的日期位于顶部。使用 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/

相关文章:

获取不同数据的SQL语句

mysql - 更新表中的最小值

sql - 如何在 Excel 中进行内连接(例如使用 VLOOKUP)

php - 找到出现次数最多的值并按其排序

sql - 在一个 MySQL 语句中截断多个表

sql-server - 如何确定插入时哪一列引发算术溢出错误?

sql-server - 无法安装 SQL Server 2008 R2

json - 如何使用 TSQL 将 JSON 列解析为表

sql - CAST nvarchar 到 DATETIME

c# - 如何快速将数据从 SQL Server 导出到 CSV