我有一个包含 JSON 的 SQL 列,例如
{
"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,%' 的值,但这似乎是一个困惑的解决方案。
最佳答案
您可以使用 OPENJSON
提取 id
来自您的 JSON 对象和 CROSS APPLY
的值给您的 logs
表,仅选择具有 id
的行JSON 对象中的值 13:
SELECT logs.*
FROM logs
CROSS APPLY OPENJSON([log], '$.tags') WITH (id INT '$.id')
WHERE id = 13
Demo on dbfiddle
关于json - 搜索对象的 SQL JSON 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54729222/