oracle 将列拆分为行

来源:互联网 发布:php授权验证系统v2.1 编辑:程序博客网 时间:2024/05/19 03:44


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

效果如下


1 0
原创粉丝点击