You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL实现列转行:将表abc中逗号分隔值拆分为多行

Oracle拆分逗号分隔字段为多行记录

给定你的表结构和数据:

create table abc
(
    column_a varchar2(100), 
    column_b varchar2(100)
);

insert into abc values ('a', 'b,c,d,e');
commit;

可以用以下两种方法实现将column_b的逗号分隔值拆分为多行,同时保留column_a的对应值:

方法1:使用CONNECT BY + 正则函数

适用于所有支持正则表达式的Oracle版本:

SELECT 
    column_a,
    REGEXP_SUBSTR(column_b, '[^,]+', 1, LEVEL) AS column_b
FROM abc
CONNECT BY 
    LEVEL <= REGEXP_COUNT(column_b, '[^,]+')
    AND PRIOR column_a = column_a
    AND PRIOR SYS_GUID() IS NOT NULL;
  • REGEXP_COUNT统计column_b中逗号分隔的元素数量,确定需要生成的行数
  • REGEXP_SUBSTR按位置提取每个分隔后的元素
  • PRIOR SYS_GUID() IS NOT NULL用于避免多数据行时出现循环连接问题

方法2:使用XMLTABLE(Oracle 11gR2+)

语法更简洁,适合高版本Oracle:

SELECT 
    a.column_a,
    b.column_b
FROM abc a,
     XMLTABLE(
         'for $i in tokenize(., ",") return $i'
         PASSING a.column_b
         COLUMNS column_b VARCHAR2(100) PATH '.'
     ) b;
  • tokenize函数将字符串按逗号拆分
  • XMLTABLE将拆分后的结果转换为行集,与原表关联得到最终结果

内容的提问来源于stack exchange,提问作者TSB

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 04:24:53