2016-08-16 142 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' 
); 
相關問題