是否可以通过JSON数组进行“ IN”查询?

时间:2018-08-08 15:52:30

标签: json sql-server tsql sql-server-2016-express

在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查询有效,但效率低

1 个答案:

答案 0 :(得分:2)

您可以将OPENJSONJSON_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'

样本输入:

enter image description here

示例输出:

enter image description here