目前我已经这样了,但它正在返回null
。
select regexp_substr( 'abcx1bcdx2mno', '[^x[[:digit:]]]+', 1,1 ) from dual;
select regexp_substr( 'abcx1bcdx2mno', '[^x[[:digit:]]]+', 1,1 ) from dual;
我希望这样,第一个查询返回abc
,第二个返回bcd
。
答案 0 :(得分:1)
不幸的是我们不能否定一组字符(搜索字符串)。作为一种解决方法,我们可以用一个字符替换我们的搜索字符串,例如空格,然后否定那一个字符:
这是一个简单的例子:
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:]]', ' ')
, '[^ ]+')
注意:oracle 11g版本中引入了regexp_count()
正则表达式函数。
结果:
RES
-------------
abc
bcd
mno