1、单独字符串进行拆分
SQL> select REGEXP_SUBSTR(str, '[^,]+', 1, LEVEL) STR
2 from (select '11,12,13,14,15,16' str from dual)
3 CONNECT BY LEVEL <= REGEXP_COUNT(str, '[^,]+');
STR
----------------------------------
11
12
13
14
15
16
已选择6行。
2、对数据表中的字段进行拆分
SQL> CREATE TABLE T(A VARCHAR2(100),B VARCHAR2(20),C VARCHAR2(20));
表已创建。
SQL> INSERT INTO T(A,B,C)VALUES('11,12,13,14,15,16','1','第一条记录');
已创建 1 行。
SQL> INSERT INTO T(A,B,C)VALUES('21,22,23,24,25,26','2','第二条记录');
已创建 1 行。
SQL> INSERT INTO T(A,B,C)VALUES('31,32,33,34,35,36','3','第三条记录');
已创建 1 行。
SQL> commit;
提交完成。
SQL>
SQL> select REGEXP_SUBSTR(A, '[^,]+', 1, LEVEL) A,B,C
2 from T
3 CONNECT BY LEVEL <= REGEXP_COUNT(A, '[^,]+')
4 and rowid= prior rowid
5 and prior dbms_random.value is not null;
A -------------------------------------------------------------------------------- B C -------------------- -------------------- 11 1 第一条记录 12 1 第一条记录 13 1 第一条记录 14 1 第一条记录 15 1 第一条记录 16 1 第一条记录 21 2 第二条记录 22 2 第二条记录 23 2 第二条记录 24 2 第二条记录 25 2 第二条记录 26 2 第二条记录 31 3 第三条记录 32 3 第三条记录 33 3 第三条记录 34 3 第三条记录 35 3 第三条记录 36 3 第三条记录 已选择18行。