SQL для получения идентификаторов пользователей из json из столбца таблицы - PullRequest
0 голосов
/ 08 февраля 2019

У меня есть таблица со столбцами dep_id и dep_value.

dep_value содержит данные, которые являются JsonData, и это выглядит так:

{
    "users": [{
        "uid": "0"
    }, {
        "uid": "1"
    }, {
        "uid": "2"
    }]
}

Мне нужноsql, который может извлечь все значения .. 0,1,2

Я пытался использовать регулярные выражения в SQL, но я не уверен, как сопоставить шаблон в SQL.

SELECT 
    REGEXP_count(dep_value,'uid') as user_count 
    FROM ( 
        select dep_value from users where dep_id = '123'
    )
;

Я использовал этоSQL, чтобы получить счетчик uid, аналогично мне нужно узнать, какие они uid.

1 Ответ

0 голосов
/ 08 февраля 2019

До 12c модуль apex_json полезен для анализа JSON без использования регулярных выражений.Пожалуйста, обратитесь к этому ответу, чтобы найти хороший пример модуля APEX_JSON в действии.

Если ваше требование ограничено только анализом всех доступных uid s из строки json, независимо от того, на какой глубине они находятся в JSON, можно использовать подобное решение Regex.

SELECT 
    REGEXP_SUBSTR(dep_value,'"uid" *?: *?"(\d+)"',1,level,null,1) as user_count 
     from users where dep_id = 123
 connect by level <= REGEXP_COUNT(dep_value,'"uid" *?: *?"(\d+)"')
 and prior dep_id = dep_id          -- You may skip these 2 lines while 
  and prior sys_guid() is not null; --running for single, unique dep_id

Демо

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