在SQL Server

时间:2017-03-22 09:07:01

标签: sql sql-server datetime

我正在使用MS SQL服务器,我有一个类型为text的日期字段。存储在那里的日期采用这种格式

  

2017-03-01T18:23:02 + 0700

我正在尝试在datetime字段中转换此字段但我失败了。我试过了

CONVERT(datetimeoffset,date, 127)
CONVERT(datetime,date, 127) 
CONVERT(datetime2,date, 127)

但我一直在

  

从字符转换日期和/或时间时转换失败   字符串。

我认为问题在于,根据ISO8601,时间偏移必须采用hh:mm格式,而我的是hhmm。如果它更容易,我不介意只保留日期(yyyy-mm-dd)。

我已经阅读了类似的问题,但没有一个与我的情况完全匹配,我无法找出解决方案。

4 个答案:

答案 0 :(得分:2)

试试这个

Declare @dt varchar(50)
set @dt = '2017-03-01T18:23:02+0700'
select convert(datetime, replace(LEFT(@dt, LEN(@dt) - 1), '+', '.'), 126)

答案 1 :(得分:0)

如果您只需要日期部分,那么您可以使用以下查询

SELECT CAST(LEFT('2017-03-01T18:23:02+0700',10) as DATE)

答案 2 :(得分:0)

使用以下查询转换日期时间:

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)   

答案 3 :(得分:0)

它似乎不会以两种方式工作(都会引发错误):

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)