串字段拆分再生成记录

本文介绍了如何在Oracle数据库中将含有逗号分隔值的列转换为多行记录。提供了两种Oracle查询方法,虽然包含了一些高级特性,可能对普通用户来说较为复杂。此外,还提到了使用SPL脚本的简便解决方案,该脚本易于理解和执行。
摘要由CSDN通过智能技术生成

【问题】

有个表是这样:

COL1                  COL 2  
a,b,c,d                  h  

想要变成

COL1     COL2  
a     h  
b     h  
c     h  
d     h  

该怎么办?越简便越好

【回答】

Oracle 中可以使用层次查询语句结合子查询或随机数完成,这里给出两种写法:

写法 1:

SELECT col1,REGEXP_SUBSTR(col1,'\[^,\]+',1,rn) col12,col2  
FROM t0052,
  (SELECT LEVEL rn FROM DUAL  
   CONNECT BY LEVEL<=(SELECT 
   MAX(length(trim(translate(col1,replace(col1,','),' '))))+1 
   FROM t0052))  
WHERE REGEXP_SUBSTR(col1,'\[^,\]+',1,rn) IS NOT NULL

写法 2:

select regexp_substr(col1,'\[^,\]+',1,level) col1,col2  
from t0052  
connect by level <= (length(col1)-length(regexp_replace(col1,'\[^,\]+','')))  
and rowid= prior rowid  
and prior dbms_random.value is not null;

这两种写法都比较复杂,其中使用了 Oracle 的一些技巧(如为了避免循环错误使用的 prior dbms_random.value is not null),对于使用者有一定难度。

这种情况还可以用 SPL 来做,脚本如下:

A
1$SELECT COL1,COL2   FROM t0052
2=A1.news(COL1.array();~:COL1,COL2)

这个脚本要简单且易理解得多,其中 A2 即所得结果集:

集算器提供 JDBC 接口,可以像数据库一样嵌入到应用程序中,用起来很简单,详细可参考【Java 如何调用 SPL 脚本】。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值