2016-08-16 126 views
1

我将一个JSON对象的输出保存在一个CSV文件中。我想将数据导入到SQL Server中。我试图将JSON日期列转换为SQL Server日期时间数据类型。如何将带时区的JSON日期转换为SQL Server日期时间?

select cast('2009-06-18T16:44:20+0000' as datetime) 

这会引发错误:从字符串转换日期和/或时间时转换失败。

如何将带有时区的JSON日期转换为SQL Server日期时间?

+0

使用datetimeoffset数据类型? – ErikEJ

+0

我已经尝试过datatimeoffset,但没有奏效。 JSON日期有些简单。 – Tarzan

回答

2

据我所知,SQL Server使用冒号识别时区。你必须重新格式化时区部分如下:

SELECT CONVERT(datetime2, STUFF('2009-06-18T16:44:20+0000', 23, 0, ':')) 

根据MSDN ISO 8601 YYYY-MM-DDThh:mm:ss[.nnnnnnn][{+|-}hh:mm]格式。

0

我有类似的问题;虽然日期的日期格式稍有不同,但我收到了同样的错误。我的解决方案是将其转换为DATETIME2值,而不仅仅是DATETIME。如果我没有看到Pawel的答案,我不会尝试转换为DATETIME2。

我得到的日期来自于使用JSON.Net序列化为JSON的C#对象。下面是一个示例SQL脚本,显示日期时间值以及如何转换它。

DECLARE @effectiveDateJSON VARCHAR(MAX) = 
'{"EffectiveDate":"2017-02-07T00:00:00-06:00", "CreateDate":"2017-02-07T16:32:12.9130892-06:00"}'; 

SELECT * 
FROM OPENJSON(@effectiveDateJSON) 
WITH (EffectiveDate DATETIME2 '$.EffectiveDate', 
    CreateDate DATETIME2 '$.CreateDate' 
); 
相关问题