Поиск элемента в массиве json верхнего уровня - PullRequest
0 голосов
/ 20 октября 2018

У меня есть массив строк, хранящихся в колонке oracle в виде массива json в следующем формате:

["abc", "xyz"]
["cde", "fgh"]
["xyz"]
  • Мне нужно написать запрос, чтобы проверить, присутствует ли данная строка в любоммассивов в любом из рядов.В приведенном выше примере я хотел бы увидеть, присутствует ли «xyz».Каким должен быть путь JSON?Я знаю, что могу использовать предложение «like», но не думаю, что это удачный способ.
  • Почему запрос SELECT JSON_QUERY (my_column, '$ [*]') FROM my_table всегда возвращает ноль?

1 Ответ

0 голосов
/ 20 октября 2018

Я сделал следующий тест, это может быть то, что вы ищете:

create table t(json_v varchar2(40))

insert into t values('["abc", "xyz"]');
insert into t values('["cde", "fgh"]');
insert into t values('["xyz"]');

SELECT *
from t, json_table(t.json_v, '$[*]' columns (value PATH '$'))
WHERE value = 'xyz'

Output Result 
JSON_V          value 
["abc", "xyz"]  xyz 
["xyz"]         xyz

Ваш второй вопрос, почему запрос всегда возвращает ноль, так как вы должны обернуть значения, смотрите синтаксис JSON_QUERY

SELECT JSON_QUERY(json_v, '$[*]' WITH WRAPPER) AS value FROM myTable;
...