oracle中如何用正则表达式按照顺序替换某个固定的表达式?

现有一个字符串公式str:='ZB0001+ZB0202-ZB0103*ZB2004/ZB0095'我想用正则表达式替换里面的ZB*变为:str:='100+200-30... 现有一个字符串公式
str := 'ZB0001+ZB0202-ZB0103*ZB2004/ZB0095'
我想用正则表达式替换里面的ZB*变为:str := '100+200-300*400/500'
也就是没替换一次就将替换的次数*100,例如:ZB0001 → 100、ZB0202 → 200
这个语句里面”??“应当怎么写呢?
select regexp_replace('ZB0001+ZB0202-ZB0103*ZB2004/ZB0095','ZB[0-9]{4}',100*??) from dual;
展开
 我来答
帐号已注销
推荐于2016-11-10 · TA获得超过315个赞
知道小有建树答主
回答量:225
采纳率:0%
帮助的人:251万
展开全部
with tmp as
 (select 'ZB0001+ZB0202-ZB0103*ZB2004/ZB0095' as str from dual)
select listagg(str) within group(order by 1)
  from (select regexp_replace(regexp_substr(str,
                                            'ZB[0-9]{4}.{0,1}',
                                            1,
                                            level),
                              'ZB[0-9]{4}',
                              100 * level) as str
          from tmp
        connect by level <= regexp_count(str, 'ZB[0-9]{4}.{0,1}'))
金刚钻Johnny
2015-07-09 · TA获得超过356个赞
知道小有建树答主
回答量:314
采纳率:100%
帮助的人:57.6万
展开全部
select regexp_replace('ZB0001+ZB0202-ZB0103*ZB2004/ZB0095','ZB[[:digit:]]{3}([[:digit:]])','\100') from dual
===
100+200-300*400/500
更多追问追答
追问
多谢您的回答,这个写法应该是巧合,我的意思是每次都将替换的此时*100,而您的这个只是后面拼接了两个0而已,相对应的,如果我要实现这个语句呢:
替换一次就将替换的次数+2

ZB0001 → 3、ZB0202 → 4
追答
把两个00换成+2就行了。不过我想不出你这个问题的实际意义,建议换个思路。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式