【发布时间】:2021-06-15 18:39:38
【问题描述】:
我收到以下格式的日期时间:
Thu, 18 Mar 2021 10:37:31 +0000
如果我在 RFC2822 中更正了这一点。
我想不出办法将其转换为 SQl 服务器将使用的“正常”日期时间。 例如,我希望它是:
2021-03-18 10:37:31
YYYY-MM-DD hh:mi:ss
我尝试过 CONVERT() 之类的方法,并通过以下方式找到了一个粗略的方法:
DECLARE @WeirdDate varchar(50) = 'Thu, 30 Jul 2015 20:00:00 +0000'
SELECT
CONVERT(DATETIME, SUBSTRING(@WeirdDate, CHARINDEX(',', @WeirdDate) + 1, 20))
但是没有一个效果那么好。 有没有办法以“正确”的方式转换它?
编辑:
澄清: 格式应该始终与提供的示例相同。包括日期名称。
我不确定它始终是同一个时区。我可能会从不同的时区收到它。这是需要考虑的事情。
【问题讨论】:
-
select parse('Thu, 18 Mar 2021 10:37:31 +0000' as datetimeoffset using 'en-US')似乎可以工作(或者DATETIME,如果你确定它总是UTC),但需要注意的是这依赖于.NET的“默认”日期/时间解析,它如果您的日期不明确,可能会导致意外。另一种方法是使用 CLR 函数来明确解析它,使用 .NET 中的显式格式说明符。使用“纯”T-SQL 代码对其进行解析在技术上是可行的,但非常没有吸引力(例如,参见 here)。 -
SQL Server 版本?
-
我猜上面建议的 .NET 解决方案是最好的解决方案……我看不出任何会失败的情况。但我建议在 (.NET) 代码中解析此类数据。
标签: sql sql-server tsql datetime rfc2822