我有一个包含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,%'的值,但这似乎是一个混乱的解决方案。
您可以使用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