问题描述:将一个长字符串按照一定规则分割为多行。
实际问题:临时表table1_temp中存储由ID号组成,由逗号相隔的一个字符串(表中只有一个字段,ID号个数可能是从1 to
100000之间的任意随机数字,每次插入前都先清空表)。现在需要执行如下操作:select * from table2 where
id in
(),括号中应为table1_temp中字符串中的id号,但是由于临时表中记录的是一个字符串,随想要将字符串按照id号,分割为多行。
问题解决:通过函数REGEXP_SUBSTR()实现。
参数介绍
第1个是输入的字符串
第2个是正则表达式
第3个是标识从第几个字符开始正则表达式匹配。(默认为1)
第4个是标识第几个匹配组。(默认为1)
第5个是是取值范围:
i:大小写不敏感;
c:大小写敏感;
n:点号 . 不匹配换行符号;
m:多行模式;
x:扩展模式,忽略正则表达式中的空白字符。
测试例子:
将字符串拆分为多行
SQL> SELECT REGEXP_SUBSTR('a,b,c,d,e', '[^,]', 1,
ROWNUM)
FROM DUAL
CONNECT BY ROWNUM <=
LENGTH('a,b,c,d,e') -
LENGTH(TRANSLATE('a,b,c,d,e', 'abcdefghijklmnopqrstuvwxyz', '$')) +
1;
------------------------------
a
b
c
d
e