Oracle中将一条记录(某字段中为合并的信息)拆分成多条记录

本文介绍了如何在Oracle数据库中利用REGEXP_SUBSTR函数将含有逗号分隔的字段拆分为多条记录,并通过SELECT...LEVEL子句进行数据转换。示例脚本展示了如何将T_B_INFO_TEST表中的记录转化为T_b_INFO_RESULT表的格式,涉及到了行生成技巧和正则表达式的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

将这种数据 select * from T_B_INFO_TEST

转化成这种数据:select * from  T_b_INFO_RESULT



转化数据的脚本:

insert into T_b_INFO_RESULT
select q.c_month,
       regexp_substr(q.prod_code, '[^,]+', 1, q.rn) prod_code,
       q.c_soto,
       q.kpi_value
  from (select t.c_month, t.prod_code, t.c_soto, t.kpi_value, t1.rn
          from (select a.c_month,
                       a.prod_code,
                       a.c_soto,
                       a.kpi_value,
                       length(a.prod_code) -
                       length(replace(a.prod_code, ',')) + 1 rn
                  from t_B_info_test a) t,
               (select level rn
                  from dual
                connect by level <=
                           (select max(length(b.prod_code) -
                                       length(replace(b.prod_code, ',')) + 1) rn
                              from t_B_info_test b)) t1
        
         where t.rn >= t1.rn) q;

其中涉及到的知识点:

select level from dual connect by level<=10;

select rownum from dual connect by rownum<=10;

select level from dual connect by rownum<=10;

select rownum from dual connect by level<=10;

这四条语句的用法相同,都是取1到10之间的数字

REGEXP_SUBSTR字符串截取正则表达式

select regexp_substr('A,B,C,D', '[^,]+', 1, ROWNUM)
  from dual
CONNECT BY ROWNUM <= 4;


REGEXP_SUBSTR是字符串截取正则表达式:A,B,C,D是要截取的字符串;[^,]+是正则表达式匹配模式,匹配以非逗号的任意字符开始,以非逗号的任意字符结束的一段字符,1是从第一个字符开始,ROWNUM 是匹配第ROWNUM字符串。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值