在 SQL Server 中以日期时间格式转换日期时间字符串
Posted
技术标签:
【中文标题】在 SQL Server 中以日期时间格式转换日期时间字符串【英文标题】:Convert datetime string in datetime format in SQL server 【发布时间】:2017-03-22 09:07:01 【问题描述】:我正在使用 MS SQL 服务器,并且我有一个文本类型的日期字段。存储在那里的日期是这种格式
2017-03-01T18:23:02+0700
我正在尝试将此字段转换为日期时间字段,但我失败了。我试过了
CONVERT(datetimeoffset,date, 127)
CONVERT(datetime,date, 127)
CONVERT(datetime2,date, 127)
但我不断得到
从字符转换日期和/或时间时转换失败 字符串。
我认为问题在于,根据 ISO8601,时间偏移必须采用 hh:mm 格式,而我的是 hhmm。如果更容易,我不介意只保留日期(yyyy-mm-dd)。
我读过类似的问题,但没有一个完全符合我的情况,我无法找出解决方案。
【问题讨论】:
如果你只需要日期然后使用这个选择左('2017-03-01T18:23:02+0700',10) 【参考方案1】:试试这个
Declare @dt varchar(50)
set @dt = '2017-03-01T18:23:02+0700'
select convert(datetime, replace(LEFT(@dt, LEN(@dt) - 1), '+', '.'), 126)
【讨论】:
【参考方案2】:如果您只需要日期部分,则可以使用以下查询
SELECT CAST(LEFT('2017-03-01T18:23:02+0700',10) as DATE)
【讨论】:
【参考方案3】:使用下面的查询来转换日期时间:
SELECT CONVERT(DATETIME,REPLACE(REPLACE('2017-03-01T18:23:02+070','T','
'),'+','.'),103)
对于 DATE 仅使用以下查询:
SELECT CONVERT(DATE,REPLACE(REPLACE('2017-03-01T18:23:02+010','T','
'),'+','.'),102)
【讨论】:
【参考方案4】:这两种方式似乎都不起作用(都引发错误):
SELECT CONVERT(datetime,'2017-03-01T18:23:02+0700',127)
SELECT CONVERT(datetime,'2017-03-01T18:23:02+07:00',127)
它似乎只能将 Z 指定为时区:
SELECT CONVERT(datetime,'2017-03-01T18:23:02Z',127)
【讨论】:
以上是关于在 SQL Server 中以日期时间格式转换日期时间字符串的主要内容,如果未能解决你的问题,请参考以下文章