sql - RFC2822 日期时间格式到 SQL 服务器中可用的日期时间
问题描述
我收到以下格式的日期时间:
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))
但没有一个工作得那么好。有没有办法以“正确”的方式转换它?
编辑:
澄清:格式应始终与提供的示例相同。包括日期名称。
我不确定它是否总是相同的时区。我可能会从不同的时区收到它。这是需要考虑的事情。
解决方案
您似乎可以通过“小”字符串操作和一些样式代码来实现这一点:
DECLARE @YourDate varchar(50) = 'Thu, 30 Jul 2015 20:00:00 +0000'
SELECT TRY_CONVERT(datetimeoffset(0),CONVERT(varchar(25),TRY_CONVERT(datetime2(0),STUFF(STUFF(@YourDate,1,5,''),21,6,''),106),126) + STUFF(RIGHT(@YourDate,5),4,0,':'));
但是,如果您使用LOGIN
的语言设置不是基于英语的设置,这将失败。
如果该值始终为 UTC,您实际上可以只使用“中间”TRY_CONVERT
表达式。
推荐阅读
- c# - 是否可以仅在应用 pdf 签名而不是在使用 iText 7 创建哈希时设置 CRL
- django - 如何在通用视图中传递 slug (Django)
- python - 检查函数是否在 Python 类中定义
- php - 无法使用 Html2pdf/TCPDF (PHP) 添加字体
- node.js - 在 Zapier 的 NodeJS 模块中发布表单数据
- assembly - MIPS lw 指令到底是做什么的?
- json - Insights-Widget“何时”条件值选项
- sql - 使用给定的频率产生额外的记录
- loops - 是否可以仅使用 for 循环来实现包含 for 循环的递归函数,该循环包含对上述函数的调用?
- android - Android软导航在菜单点击的内容前面