Need some help with splitting a varchar field into multiple rows in oracle. example: in the given data sample, the order number is unique. I want to split the service code into multiple rows and each service code is separated by |
Thanks!
Need some help with splitting a varchar field into multiple rows in oracle. example: in the given data sample, the order number is unique. I want to split the service code into multiple rows and each service code is separated by |
Thanks!
Here's an example.
Sample data is in lines #1 - 5 (you already have that in your table, don't type that); query that does the job begins at line #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, date '2016-11-30', '2043|2020|2023|2047' from dual union all
4 select 67, date '2016-11-30', 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, datum, 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>