我有一个包含列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。
答案 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