当前位置: 首页 > 知识库问答 >
问题:

Oracle拆分表列分隔值到行

劳鹏云
2023-03-14

需要帮助以下从测试中选择col1、col2、split(col3);

Col1 col2 col3
xxx  yyy  a,b,c
iii  jjj  1,2,3
col1 col2 split
xxx  yyy  a
xxx  yyy  b
xxx  yyy  c
iii  jjj  1
iii  jjj  2
iii  jjj  3

任何regex或PL/SQL函数的想法都可以帮助实现这一点。

共有1个答案

拓拔元徽
2023-03-14

一个选项使用标准递归查询:

with cte (col1, col2, pos, split, rest) as (
    select col1, col2, 1,
        substr(col3 || ',', 1, instr(col3 || ',', ',') - 1), 
        substr(col3 || ',', instr(col3 || ',', ',') + 1)
    from mytable 
    union all
    select col1, col2, pos + 1,
        substr(rest, 1, instr(rest, ',') - 1),
        substr(rest, instr(rest, ',') + 1)
    from cte 
    where instr(rest, ',') > 0
)
select col1, col2, split, pos from cte order by col1, col2, pos

DB Fiddlde上的演示:

COL1 | COL2 | SPLIT | POS
:--- | :--- | :---- | --:
iii  | jjj  | 1     |   1
iii  | jjj  | 2     |   2
iii  | jjj  | 3     |   3
xxx  | yyy  | a     |   1
xxx  | yyy  | b     |   2
xxx  | yyy  | c     |   3
 类似资料:
  • 问题内容: 我返回的值包含255个逗号分隔的值。有没有一种简单的方法可以将其拆分为不具有255 substr的列? 到 问题答案: 您可以使用: 我建议您在Excel(或其他电子表格)中生成255个数字的列,并使用电子表格生成SQL代码。

  • 问题内容: 我的数据库中有列,其中的值如下所示: 在虚拟列中没有任何编号。逗号分隔的值可以出现。我尝试了以下查询,但它正在创建重复的结果。 我不明白这个问题。谁能帮忙? 问题答案: 非常适合我- 还有许多其他方法可以实现它。阅读将单个逗号分隔的字符串拆分成行。 *关于使用列而不是单个字符串值时的重复项的 *更新 。只见PRIOR子句中使用DBMS_RANDOM的摆脱循环回路的在这里 尝试以下方法

  • 问题内容: 我有一个小样本数据: 好像 我想用’-‘分隔符分隔列’V’并将其移至另一个名为’allele’的列 到目前为止,我尝试过的代码不完整,无法正常工作: 要么 问题答案: 与vectoried一起使用:

  • 我在csv文件中有一个列,其中包含此格式的人员详细信息: 实际csv格式: 我想将它们拆分为一个新的csv文件,如下所示: 拆分详细信息: 拆分行分隔符:

  • 问题内容: 我有一个其中有很多记录的记录,我想知道其中有多少个名字,以及其中一个名字多少时间。 表名 我想找到多少个名字及其数量。 预期的输出应该是这样的 帮助我解决它。 问题答案: 结果:

  • 问题内容: 一些外部数据供应商希望给我一个数据字段-管道分隔的字符串值,我觉得这很难处理。 没有应用程序编程语言的帮助,有没有办法将字符串值转换为行? 但是,存在一个困难,该字段具有未知数量的定界元素。 有问题的数据库引擎是MySQL。 例如: 问题答案: 它可能没有我最初想象的那么困难。 这是一种通用方法: 计算分隔符的出现次数 循环多次,每次获取一个新的定界值并将该值插入第二个表中。