搜索SQL JSON对象数组

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

我有一个包含JSON的SQL列,例如this

{
"tags":[
{"id":11,"x":99.12343123213,"y":88.123232},
{"id":12,"x":99.12343123213,"y":88.123232},
{"id":13,"x":99.12343123213,"y":88.123232}
]
}

我试图找到值为'13'的记录,但对象的数量可能会有所不同。我知道我可以使用类似的代码:

select * from Logs WHERE JSON_VALUE([log],'$.tags[0].id') LIKE '13'

不幸的是,数组中的对象数量可以是任意数量。我如何搜索数组中的每个对象的值?

我知道我可以通过字符串搜索'%“id”:13,%'的值,但这似乎是一个混乱的解决方案。

json sql-server
1个回答
1
投票

您可以使用OPENJSON从您的JSON对象和id中提取CROSS APPLY值到logs表,只选择在JSON对象13中具有id值的行:

SELECT logs.*
FROM logs
CROSS APPLY OPENJSON([log], '$.tags') WITH (id INT '$.id')
WHERE id = 13

Demo on dbfiddle

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