经常会遇到字符串拆分,比如逗号分隔、空格分隔、没有分隔符(按指定长度拆分)等类型的字符串拆分。由于这几种类型的处理思路是一致的,下面就逗号分隔的情况做下分析:
下面展示下我经常使用的方法:
层次查询+正则表达式
单行的情况:
select regexp_substr('a,bb,ccc,bb', '[^,]+', 1, level) split_chr
from dual
connect by regexp_instr('a,bb,ccc,bb', '[^,]+', 1, level) > 0;
或者
select regexp_substr('a,bb,ccc,bb', '[^,]+', 1, level) split_chr
from dual
connect by regexp_substr('a,bb,ccc,bb', '[^,]+', 1, level) is not null;
SPLIT_CHR
----------------------
a
bb
ccc
bb
步骤分析:
select 'a,bb,ccc,bb' chr, level
from dual
connect by regexp_instr('a,bb,ccc,bb', '[^,]+', 1, level) > 0;
CHR LEVEL
----------- ----------
a,bb,ccc,bb 1
a,bb,ccc,bb 2
a,bb,ccc,bb 3
a,bb,ccc,bb 4
单行的情况下,其实是通过层次查询connec