Можно ли выполнить запрос IN над массивом JSON?

В SQL Server есть ли способ сделать IN запрос по массиву JSON?

например.

Там есть колонка foo который содержит массив JSON

row1 -> {"foo":["a", "b"]}

row2 -> {"foo":["c", "a", "b"]}

Мне нужно запросить строки, которые имеют b в массиве JSON

JSON_QUERY может вернуть массив, но нет способа сделать

Что-то вроде

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

LIKE запрос будет работать, но неэффективен

1 ответ

Решение

Вы можете объединить 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'

Пример ввода:

Образец вывода:

Другие вопросы по тегам