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行。