1

在 SQL Server 中,有没有办法对INjson 数组进行查询?

例如。

有一列foo包含一个 json 数组

第 1 行 ->{"foo":["a", "b"]}

第 2 行 ->{"foo":["c", "a", "b"]}

我需要查询bjson 数组中的行

JSON_QUERY可以返回数组,但是没办法

就像是

SELECT *   
FROM table1 
WHERE "b" in JSON_QUERY(foo)

LIKE查询将起作用,但效率低下

4

1 回答 1

3

您可以结合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'

样本输入:

在此处输入图像描述

样本输出:

在此处输入图像描述

于 2018-08-08T16:50:36.203 回答