目前我有这个,但它正在返回null
。
select regexp_substr( 'abcx1bcdx2mno', '[^x[[:digit:]]]+', 1,1 ) from dual;
select regexp_substr( 'abcx1bcdx2mno', '[^x[[:digit:]]]+', 1,1 ) from dual;
我想要这样,第一个查询返回abc
,第二个返回bcd
。
不幸的是,我们不能否定一组字符(搜索字符串)。作为一种解决方法,我们可以用单个字符(例如空格)替换我们的搜索字符串,然后否定那个字符:
这是一个简单的例子:
with t1(col) aS(
select 'abcx1bcdx2mno' from dual
)
select regexp_substr( regexp_replace(col, 'x[[:digit:]]', ' '), '[^ ]+'
, 1, level) as res
from t1
connect by level <= regexp_count( regexp_replace(col, 'x[[:digit:]]', ' ')
, '[^ ]+')
注意:regexp_count()
oracle 11g 版本中引入了正则表达式函数。
结果:
RES
-------------
abc
bcd
mno