我正在使用 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()
编写查询,但没有成功。我真的很感谢一些帮助或提示来解决我的问题。
一种可能的方法是使用
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