我有一个包含 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}
]
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试查找值为“13”的记录,但对象的数量可能会有所不同。我知道我可以使用类似于以下的代码:
select * from Logs WHERE JSON_VALUE([log],'$.tags[0].id') LIKE '13'
Run Code Online (Sandbox Code Playgroud)
不幸的是,数组中的对象数量可以是任意数量。如何在数组中的每个对象中搜索该值?
我知道我可以在字符串中搜索 '%"id":13,%' 的值,但这似乎是一个混乱的解决方案。
Nic*_*ick 10
您可以用于从 JSON 对象中OPENJSON
提取值并将其提取到表中,仅选择JSON 对象中值为 13 的行:id
CROSS APPLY
logs
id
SELECT logs.*
FROM logs
CROSS APPLY OPENJSON([log], '$.tags') WITH (id INT '$.id')
WHERE id = 13
Run Code Online (Sandbox Code Playgroud)