回答:先拆;然后拆:分列。
有一个深入的难点,就是第一个行是2组,但如果是n组呢?
with T1 as
(SELECT distinct REGEXP_SUBSTR(data, '+', 1, level, 'c') AS source_string
FROM test_split
connect by level <=
length(data) - length(REGEXP_REPLACE(data, ';', '')) + 1)
select source_string,substr(source_string, 1, instr(source_string, ':',1,1) - 1) first,
substr(source_string, instr(source_string, ':',1,1) +1, (instr(source_string, ':',1,2) - instr(source_string, ':',1,1)-1)) second,
substr(source_string, instr(source_string, ':',1,2) +1, (instr(source_string, ':',1,3) - instr(source_string, ':',1,2)-1)) third,
substr(source_string, instr(source_string, ':',1,3) +1) forth
from t1