目前,我有这个,但它正在返回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
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句