oracle中正则求助

请教一下各位, 在oracle中如何比如这样的数据

如何用正则将第7段的值替换掉,就是第6-7个.中间的数据替换掉

就是我如下图片中红色位置的数据。替换掉一个固定值比如99999,(所有数据总共10段。按.号分隔的。只把第7段的数据替换掉)


image.png

CD20160914 发布于 2020-11-16 10:39
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共2回答
最佳回答
0
shirokoLv6资深互助
发布于2020-11-16 10:57(编辑于 2020-11-16 10:57)
SELECT regexp_replace(STR, '[^\.]+', '999999',INSTR(STR,'.',1,6),1) RES FROM (
SELECT '6006.0.0.2202010501.0.0.6006160003.W005564.0.0' STR FROM DUAL)

image.png

最佳回答
0
张洪威Lv6高级互助
发布于2020-11-16 10:54

用instr找到出现的位置就行了,instr第四个参数是选择第几次出现,然后拼接下。


with t as (select '1,2,3,4,5,6,7,8,9,10' as a from dual )

select a,instr(a,',',1,6),instr(a,',',1,7),SUBSTR(a,1,instr(a,',',1,6))||'99999'||substr(a,instr(a,',',1,7),100) from t


image.png

  • CD20160914 CD20160914(提问者) 老师,你这个全是一位数,用instr从6位,与第7位可以,但是我的每一段并不是只有一位数字。。
    2020-11-16 10:58 
  • 张洪威 张洪威 回复 CD20160914(提问者) 你用楼下的方法吧比较简单。其实位数几位是没影响的,都是动态获取拼接的,不行你可以测测。
    2020-11-16 11:00 
  • 3关注人数
  • 411浏览人数
  • 最后回答于:2020-11-16 10:57
    请选择关闭问题的原因
    确定 取消
    返回顶部