如何分离 ;在 Oracle 中加入多行 [重复]

How to separate ; into multiple rows in Oracle [duplicate]

提问人:Anisha S 提问时间:9/14/2023 最后编辑:LittlefootAnisha S 更新时间:9/14/2023 访问量:36

问:

如何分离 ;在 Oracle 中加入多行 请在 Oracle 中编写查询

注意:分号应取自具有 3 或 4 个以上的输入表..最多可扩展到 n 个数字。我们不能假设它。它应该将分号分成多行

我有一张表格,如下所示。

输入:

编号
1 几十万之后;年 - 一些句子;这句话/也许是我们最强的方式
2 虚拟文本块;出版和平面设计;填补页面中的空白;在实际单词之前/添加

输出应为:

编号
1 几十万之后
1 years - 一些句子
1 这句话/也许是我们最强的方式
2 虚拟文本块
2 出版和平面设计
2 填补页面空白
2 在实际单词之前/添加

任何帮助将不胜感激。

需要用 Oracle 编写的查询

sql 正则表达式 oracle 拆分 oracle11g

评论


答:

1赞 Littlefoot 9/14/2023 #1

下面是一个选项,用于示例数据

SQL> with test (id, sentence) as
  2    (select 1, 'After hundreds of thousands;years - some sentence;the sentence/Perhaps our strongest way' from dual union all
  3     select 2, 'dummy block of text;publishing and graphic design;fill gaps in the page;before the actual words / added' from dual
  4    )

查询:

  5  select id,
  6    regexp_substr(sentence, '[^;]+', 1, column_value) sentence
  7  from test cross join
  8    table(cast(multiset(select level from dual
  9                        connect by level <= regexp_count(sentence, ';') + 1
 10                       ) as sys.odcinumberlist))
 11  order by id, column_value;

        ID SENTENCE
---------- ----------------------------------------------------------------------------------------------------
         1 After hundreds of thousands
         1 years - some sentence
         1 the sentence/Perhaps our strongest way
         2 dummy block of text
         2 publishing and graphic design
         2 fill gaps in the page
         2 before the actual words / added

7 rows selected.

SQL>