在 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 中以日期时间格式转换日期时间字符串的主要内容,如果未能解决你的问题,请参考以下文章

Sql Server日期时间格式转换

sql server 数据库,在查询sql语句中日期格式转换问题,怎么把原数据年月日时分秒转换成年月日

Sql Server 日期时间格式转换

sqlserver 如何把日期型转换成指定格式

sql server CONVERT 日期转换问题

SQL Server日期时间格式转换字符串详解