如上图所示,其中 USERIDS 字段是多个ID组合的字符,
现在有个需求,就是将USERIDS 中每个单独的id 列出来对应一个单独的NAME,即每个NAME对应单独的USERID
考虑到 USERIDS 是逗号分隔符 分隔的,所以我们采用oracle 中的正则表达式函数分隔 。regexp_substr
oracle 逛网介绍详细地址为
https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions131.htm
REGEXP_SUBSTR函数格式如下:
function REGEXP_SUBSTR(String, pattern, position, occurrence, modifier)
__srcstr :需要进行正则处理的字符串
__pattern :进行匹配的正则表达式
__position :起始位置,从第几个字符开始正则表达式匹配(默认为1)
__occurrence :标识第几个匹配组,默认为1
__modifier :模式('i'不区分大小写进行检索;'c'区分大小写进行检索。默认为'c'。)
具体做法如下:
SELECT e.name role_name,
REGEXP_SUBSTR(e.userids, '[^,]+', 1, level, 'i') AS user_id
FROM t_dm_role e
CONNECT BY LEVEL <= regexp_count(e.userids, ',') - 1
and e.name = prior e.name
and rowid = prior rowid
and prior dbms_random.value is not null;
效果如下