ORACLE SQL语句 拆分字符串 并换行(在ORACLE数据库中完成)

如题:在ORACLE数据库中的数据如下,如何将以下格式1在ORACLE数据库中转换成为以下格式2?------------------------------------... 如题: 在ORACLE 数据库中的数据如下,如何将以下格式1 在ORACLE数据库中转换成为以下格式2?
--------------------------------------------------------------------------------
格式1
A栏 B栏
TEST1 C749,C153,C154,C155,C158,C183,C240
---------------------------------------------------------------------------------
格式2
A栏 B栏
TEST1 C749
TEST1 C153
TEST1 C154
....
---------------------------------------------------------------------------------
展开
 我来答
匿名用户
2018-03-12
展开全部
SELECT
    stu.id,
    REGEXP_SUBSTR (stu.name, '[^,]+', 1, lv) stuname
FROM
    stu,
    (
        SELECT
            LEVEL lv
        FROM
            dual CONNECT BY LEVEL < 10
    ) b
WHERE
    b.lv <= REGEXP_COUNT (stu.name, '\,') + 1
ORDER BY
    stu.id,stuname;

如果字段子项多,调整level<10为更大值即可,应该满足你的需求

badkano
推荐于2016-01-24 · 知道合伙人体育行家
badkano
知道合伙人体育行家
采纳数:144776 获赞数:885365
团长

向TA提问 私信TA
展开全部

创建测试表

create table tb(
col1 varchar2(10),
col2 varchar2(100));

insert into tb values ('TEST1','C749,C153,C154,C155,C158,C183,C240');

运行

select col1,
substr(t.ca,instr(t.ca, ',', 1, c.lv) + 1,instr(t.ca, ',', 1, c.lv + 1) - (instr(t.ca, ',', 1, c.lv) + 1)) AS col2
from 
(select col1,',' || col2 || ',' AS ca,length(col2 || ',') - nvl(length(REPLACE(col2, ',')),0) AS cnt FROM tb) t,
(select LEVEL lv from dual CONNECT BY LEVEL <= 100) c 
where c.lv <= t.cnt

结果

本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
977657205
2013-12-13 · TA获得超过452个赞
知道小有建树答主
回答量:332
采纳率:100%
帮助的人:223万
展开全部

你这个数据格式是固定的吗?如果是固定的就可以这样写

select A,substr(B,1,4) from 表
union
select A,substr(B,6,4) from 表
union
select A,substr(B,11,4) from 表
union
select A,substr(B,16,4) from 表
……
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zh5059288
2013-12-13
知道答主
回答量:10
采纳率:0%
帮助的人:6.4万
展开全部
with
t
as( select 'TEST1' a, 'C749,C153,C154,C155,C158,C183,C240'
b
from
dual)
select a,
regexp_substr(b,'[^,]+',1,level)
b from
t
connect
by
level<=length(b)-length(replace(b,',',''))

试试吧
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
邮记子家传G
2018-03-11 · 超过18用户采纳过TA的回答
知道答主
回答量:47
采纳率:0%
帮助的人:26.3万
展开全部
以B栏字段进行分组,select B栏,A栏 from 表 group by B栏;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式