在 SQL 中对日期的字符串值进行排序

Posted

技术标签:

【中文标题】在 SQL 中对日期的字符串值进行排序【英文标题】:Sort String Value for Date in SQL 【发布时间】:2021-07-19 23:42:18 【问题描述】:

我有一个问题,因为我试图选择存储在 SQL 服务器中的日期值作为字符串值,格式为“Thu, 08 Jul 2021 06:08:20 -0700”,我需要选择所有具有最新日期的表首先,但我不知道如何将此字符串转换为日期并对其进行排序。提前致谢。

表格

           |Thu, 08 Jul 2021 06:08:20 -0700|
           |Fri, 09 Jul 2021 01:08:20 -0700|
           |Sun, 11 Jul 2021 07:08:20 -0700|

输出(最新日期优先)

           |Sun, 11 Jul 2021 07:08:20 -0700|
           |Fri, 09 Jul 2021 01:08:20 -0700|
           |Thu, 08 Jul 2021 06:08:20 -0700|
          

【问题讨论】:

我什至无法解析使用TRY_CONVERT。您应该停止将日期存储为字符串。 我将尝试将此值排序为日期,但我也不知道我是否可以使用转换或不转换插入此格式,如果我需要转换,我不知道格式 据我所知你不能使用CONVERT 好的,感谢您的支持和您的评论,我会等待有人遇到这个问题并且可以解决它:) 【参考方案1】:

您的日期只是缺少一个有效的时区偏移值,因此需要插入“:”,因此它是-07:00,您可以使用stuff 执行此操作,并使用substring 忽略不相关的日期名称。您没有说明特定的数据库平台,对于 SQL Server,您可以将其转换为 datetimeoffset,其他数据库具有类似但略有不同的语法。当然,这假设所有字符串的格式都是一致的。

declare @d varchar(30)='Thu, 08 Jul 2021 06:08:20 -0700'
select Cast(Stuff(Substring(@d,6,26),25,0,':') as datetimeoffset(0))

结果

2021-07-08 06:08:20 -07:00

【讨论】:

感谢您的回复,但我需要知道如何选择整个表格并使用按“Thu, 08 Jul 2021 06:08:20 -0700”这种格式排序的日期对结果进行排序跨度> 好的,理想情况下,您可以将数据存储为实际的date 数据类型,但是您可以简单地在order by 中应用转换 - 例如select * from table order by Cast(Stuff(Substring(DateColumnName,6,26),25,0,':') as datetimeoffset(0))

以上是关于在 SQL 中对日期的字符串值进行排序的主要内容,如果未能解决你的问题,请参考以下文章

如何在 RecyclerView 中对字符串元素进行排序?

在 SQL 中对星期几进行排序

是否可以在 ExtJS 3.2 中对日期进行自定义排序

为了在 PL/SQL 中对这些数据进行排序,使用啥数据结构?

如何在 SQL Server 中按日期列排序的组中对列进行排名

如何在 Spark 中对包含日期和时间值的列进行排序?