在SQL Server中,是否可以通过json数组进行IN
查询?
例如
有一列foo
,其中包含一个json数组
第1行-> {"foo":["a", "b"]}
第2行-> {"foo":["c", "a", "b"]}
我需要查询json数组中有b
的行
JSON_QUERY
可以返回数组,但是没有办法
类似
SELECT *
FROM table1
WHERE "b" in JSON_QUERY(foo)
LIKE
查询有效,但效率低
答案 0 :(得分:2)
您可以将OPENJSON
与JSON_QUERY
结合使用,并使用CROSS APPLY
将结果分解为数组元素级别
declare @tmp table (foo nvarchar(max))
insert into @tmp values
('{"foo":["a", "b"]}')
,('{"foo":["c", "a", "b"]}')
,('{"foo":["c", "a", "y"]}')
SELECT foo
FROM @tmp AS c
CROSS APPLY OPENJSON(JSON_QUERY(foo, '$.foo')) AS x
where x.[value]='b'
样本输入:
示例输出: