Oracle 一行转多行(二)

本文详细介绍了如何在Oracle中通过SQL进行一行数据拆分成多行,包括使用substr和instr函数的技巧,以及在进阶场景下同时处理两个或更多列的拆分。通过实例演示了复杂的数据拆分过程,适合数据库开发者深入理解和实践.
摘要由CSDN通过智能技术生成

一.一行转多行

一行数据
使用如下语句拆分:

SELECT substr(a, instr(a, ',', 1, levels.lvl) + 1, instr(a, ',', 1, levels.lvl + 1) -(instr(a, ',', 1, levels.lvl) + 1)) as a,t1.you_col,t1.sort
FROM
(SELECT ',' || you_col || ',' AS a,length(you_col) - nvl(length(REPLACE(you_col, ',')), 0) + 1 AS cnt,t.you_col,t.sort FROM you_table t) t1,
(SELECT rownum AS lvl FROM (SELECT MAX(length(you_col || ',') - nvl(length(REPLACE(you_col, ',')), 0)) max_len FROM you_table ) CONNECT BY LEVEL <= max_len) levels
WHERE levels.lvl <= t1.cnt

多行数据

二.进阶

一行数据
使用如下语句拆分:

SELECT 
substr(a, instr(a, ',', 1, levels.lvl) + 1, instr(a, ',', 1, levels.lvl + 1) -(instr(a, ',', 1, levels.lvl) + 1)) as a,
substr(b, instr(b, ',', 1, levels2.lvl) + 1, instr(b, ',', 1, levels2.lvl + 1) -(instr(b, ',', 1, levels2.lvl) + 1)) as b,
t1.you_col,t1.you_col2,t1.sort
FROM
(SELECT ',' || you_col || ',' AS a,length(you_col) - nvl(length(REPLACE(you_col, ',')), 0) + 1 AS cnt,',' || you_col2 || ',' AS b,length(you_col2) - nvl(length(REPLACE(you_col2, ',')), 0) + 1 AS cnt2,t.you_col,t.you_col2,t.sort FROM you_table t) t1,
(SELECT rownum AS lvl FROM (SELECT MAX(length(you_col || ',') - nvl(length(REPLACE(you_col, ',')), 0)) max_len FROM you_table ) CONNECT BY LEVEL <= max_len) levels,
(SELECT rownum AS lvl FROM (SELECT MAX(length(you_col2 || ',') - nvl(length(REPLACE(you_col2, ',')), 0)) max_len FROM you_table ) CONNECT BY LEVEL <= max_len) levels2
WHERE levels.lvl <= t1.cnt and levels2.lvl <= t1.cnt2

多行数据
详情(喝醉的马儿的<oracle 一行转多行>)

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值