在具有多个数组元素的 JSON 中搜索特定属性并获取另一个属性值

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

我正在使用 MS SQL 2019,需要在 JSON 中搜索包含特定属性的数组。并获取另一个属性的最新值。我的 JSON 看起来像这样:

{
    "Comment":[
        {"Id":"1","CreateTime":"20241001","UpdateTime":0,"value":"aaa"}
        ,{"Id":"2","CreateTime":"20241002","UpdateTime":0,"User":"A","Result":"bbb"}
        ,{"Id":"3","CreateTime":"20241003","UpdateTime":0,"value":"ccc"}
        ,{"Id":"4","CreateTime":"20241004","UpdateTime":0,"User":"B","Result":"ddd"}
    ]
}

我需要搜索包含属性User的数组。在我的示例中,这些是 Id 2 和 4 的数组。我需要获取 Id 4 的属性 Result 的值,因为它具有最新的 CreateTime。所以查询必须返回ddd

我尝试用

JSON_QUERY()
编写查询,但没有成功。我真的很感谢一些帮助或提示来解决我的问题。

json sql-server sql-server-2019
1个回答
0
投票

一种可能的方法是使用

OPENJSON()
和适当的模式解析 JSON 内容,将其转换为表格并获得预期结果:

JSON:

DECLARE @json nvarchar(max) = N'{
    "Comment":[
        {"Id":"1","CreateTime":"20241001","UpdateTime":0,"value":"aaa"}
        ,{"Id":"2","CreateTime":"20241002","UpdateTime":0,"User":"A","Result":"bbb"}
        ,{"Id":"3","CreateTime":"20241003","UpdateTime":0,"value":"ccc"}
        ,{"Id":"4","CreateTime":"20241004","UpdateTime":0,"User":"B","Result":"ddd"}
    ]
}'

声明:

SELECT TOP 1 [Result]
FROM OPENJSON(@json, '$.Comment') WITH (
   [User] nvarchar(10) '$.User',
   [Result] nvarchar(10) '$.Result',
   [CreateTime] varchar(10) '$.CreateTime'
)
WHERE [User] IS NOT NULL
ORDER BY TRY_CONVERT(date, [CreateTime]) DESC
© www.soinside.com 2019 - 2024. All rights reserved.