根据分隔符将 oracle 中的字符串拆分为多列

问题描述

在 oracle 中将 varchar 字段拆分为多行需要一些帮助。 例子: 在给定的数据样本中,订单号是唯一的。我想把服务代码拆分成多行,每个服务代码用|

分隔

data sample

谢谢!

解决方法

这是一个例子。

示例数据在第 1 - 5 行(您的表格中已经有了,不要输入);执行任务的查询从第 6 行开始。

SQL> with test (order_no,datum,service_cd) as
  2    (select 17,date '2016-11-30','2106|2100|2105'      from dual union all
  3     select 23,'2043|2020|2023|2047' from dual union all
  4     select 67,null                 from dual
  5    )
  6  select order_no,7         datum,8         regexp_substr(service_cd,'[^|]+',1,column_value) val
  9  from test cross join
 10    table(cast(multiset(select level from dual
 11                        connect by level <= regexp_count(service_cd,'\|') + 1
 12                       ) as sys.odcinumberlist))
 13  order by order_no,column_value;

  ORDER_NO DATUM      VAL
---------- ---------- ----------
        17 30/11/2016 2106
        17 30/11/2016 2100
        17 30/11/2016 2105
        23 30/11/2016 2043
        23 30/11/2016 2020
        23 30/11/2016 2023
        23 30/11/2016 2047
        67 30/11/2016

8 rows selected.

SQL>