ORACLE中将带分隔符的字符串拆分成多行,有很多方法,我将多种常见和不常见的拆分方法进行了收集整理。 通常这个操作被归类为行列转换的范畴。
为了方便测试,我将每一种方法封装成一个函数,返回一个字符串集合。
0.创建自定义集合类型
SQL> create type t_vchars as table of varchar2(4000);
2 /
Type created
1.正则表达式REGEXP_SUBSTR方法
直接SQL查询逗号分隔的语句为:
SQL> select regexp_substr('男,女', '[^,]+', 1, level) as col
2 from dual
3 connect by level <= length('男,女')-length(REPLACE('男,女', ',', '')) + 1;
COL
------
男
女
封装成函数:
SQL> create or replace function F_SPLITSTR1
(V_CHAR_IN VARCHAR2 --需要拆分字符串
,V_DELIMER VARCHAR2 --分隔符
) return t_vchars is
2 FunctionResult t_vchars;
3 begin
4
5 select regexp_substr(V_CHAR_IN, '[^'||V_DELIMER||']+', 1, level) as col
6 BULK COLLECT INTO FunctionResult
7 from dual
8 connect by level <= length(V_CHAR_IN)-length(REPLACE(V_CHAR_IN, V_DELIMER, '')) + 1;
9 RETURN FunctionResult;
10 end F_SPLITSTR1;
11 /
Function created
SQL> select * FROM TABLE(F_SPLITSTR1('A,B,C,#D,E,F',','));
COLUMN_VALUE
--------------------------------------------------------------------------------
A
B
C
#D
E
F