搜索对象的SQL JSON数组

时间:2019-02-17 01:06:12

标签: json sql-server

我有一个SQL列,其中包含诸如此类的JSON

{
"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,%'的值,但这似乎是一个麻烦的解决方案。

1 个答案:

答案 0 :(得分:1)

您可以使用OPENJSON从JSON对象中提取id值,并将CROSS APPLY的值提取到logs表中,仅选择具有{{1} }在JSON对象中的值为13:

id

Demo on dbfiddle