Как "выбрать где" внутри json в Oracle SQL Developer? - PullRequest
3 голосов
/ 06 августа 2020

У меня есть таблица DISCOUNT_CODES с двумя столбцами, один из которых имеет JSON значения:

CODE           ACTIVE
1234           {"active":"Y"}
2468           {"active":"N"}
1359           {"active":"Y"}

Поскольку второй столбец находится в JSON, мне было интересно, есть ли способ выбрать коды, которые активны без необходимости выполнять запрос выбора, например:

SELECT CODE FROM DISCOUNT_CODES WHERE ACTIVE = '{"active":"Y"}';

В псевдокоде, мне интересно, возможно ли что-то вроде этого:

SELECT CODE FROM DISCOUNT_CODES WHERE JSON(ACTIVE $.active) = "Y";

Изменить: I я использую Oracle Database 12 c Enterprise Edition Release 12.1.0.2.0 - 64-битный производственный

Ответы [ 2 ]

1 голос
/ 06 августа 2020

Вы также можете использовать JSON_EXISTS

SELECT CODE FROM DISCOUNT_CODES
WHERE json_exists(ACTIVE, '$?(@.active == "Y")');
1 голос
/ 06 августа 2020

Да, вы можете использовать оператор SELECT, содержащий JSON_TABLE() функцию для версии БД 12c +, например, приведенный ниже:

SELECT d.code
  FROM discount_codes d
 CROSS JOIN JSON_TABLE(active, '$' COLUMNS (
                                            active VARCHAR2(100) PATH '$.active'
                                           )
                      ) j
 WHERE j.active = 'Y' 

Демо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...