SQL从表中的列中的json中检索用户ID

时间:2019-02-07 21:58:46

标签: sql json oracle

我有一个包含列dep_iddep_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 :(得分:0)

在12c之前,模块apex_json可用于解析JSON,而无需依赖正则表达式。请参考此答案,以找到有效的APEX_JSON模块中的example

如果您的要求仅限于仅解析json字符串中所有可用的uid,而不管它们在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

Demo