oracle 将列拆分为行


如上图所示,其中 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;

效果如下


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值