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

问题描述 投票:0回答:2

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

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

在具有 OPENJSON Sql 函数的存储过程中。 当我使用此函数执行“SELECT”时,它失败并出现此错误

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

我的观察是 OPENJSON 无法转换第三位数字之后的毫秒部分。

问题 有人见过 OPENJSON SQL 函数出现这样的问题吗?

sql-server json azure-sql-database
2个回答
11
投票

如果

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


0
投票

对我来说这是比较顺序

我的json:

declare @advanceSearch nvarchar(max) = N'[{"field":"title","op":"like","val":"a"},{"field":"RegDate","op":"<=","val":"2024-07-12"}]'

以及查询地点:

where searchField = 'RegDate' and RegDate < searchValue)

但在检查第一部分之前首先比较值(第二部分)

© www.soinside.com 2019 - 2024. All rights reserved.