OPENJSON函数中日期时间转换失败

Tus*_*arJ 3 sql-server json azure-sql-database

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

"startTime": "2017-07-12T17:14:16.0500772Z",
"endTime": "2017-07-12T17:14:17.2939322Z",
Run Code Online (Sandbox Code Playgroud)

在带有OPENJSON Sql函数的存储过程中。当我使用此功能执行“ SELECT”时,它将失败并显示此错误

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

我的观察是,OPENJSON无法在第3位数字后转换millisec部分。

问题 有没有人看到过OPENJSON SQL函数的此类问题?

Joh*_*tti 5

如果DateTime2,您应该没有问题

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

退货

AsDT2                         AsDT
2017-07-12 17:14:16.0500772   NULL   --<< Fails DateTime conversion
Run Code Online (Sandbox Code Playgroud)

实际转换

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'
 ) 
Run Code Online (Sandbox Code Playgroud)

看到它在行动dbFiddle