OPENJSON函数中的datetime转换失败

时间:2017-07-19 16:38:32

标签: sql-server json azure-sql-database

我正在使用来自logicapp事件的json,它具有以下格式的日期时间属性

"startTime": "2017-07-12T17:14:16.0500772Z",
"endTime": "2017-07-12T17:14:17.2939322Z",

在带有 OPENJSON Sql函数的存储过程中。 当我执行' SELECT'使用此功能时,它会因此错误而失败

  

消息241,级别16,状态1,行33转换时转换失败   字符串的日期和/或时间。

我的观察是OPENJSON无法在第3位数后转换毫秒级部分。

问题 有没有人看到OPENJSON SQL函数出现这样的问题?

1 个答案:

答案 0 :(得分:4)

如果DateTime2,您应该没有问题

示例

select AsDT2 = try_convert(datetime2,'2017-07-12T17:14:16.0500772Z')
      ,AsDT  = try_convert(datetime, '2017-07-12T17:14:16.0500772Z')

<强>返回

AsDT2                         AsDT
2017-07-12 17:14:16.0500772   NULL   --<< Fails DateTime conversion

实际转化

Declare @JSON varchar(max) = '{"startTime": "2017-07-12T17:14:16.0500772Z","endTime": "2017-07-12T17:14:17.2939322Z"}'

SELECT * FROM  
 OPENJSON (@JSON )  
WITH (   
              startTime  datetime2 '$.startTime',  
              endTime    datetime2 '$.endTime'
 ) 

查看行动dbFiddle