每次出现Oracle regexp_replace

时间:2013-08-26 07:18:10

标签: sql regex oracle replace

我希望使用regexp_replace替换第一次出现的每次出现的String。以下查询将仅替换第二次出现。

select 'This is test STRING STRING some text STRING some more text'
  from dual 

select regexp_replace('This is test STRING STRING some text STRING some more text',
                      'STRING',
                      'REPLACED-STRING' ,
                      1,
                      2)
  from dual

结果是,

  

这是测试STRING REPLACED-STRING一些文字STRING更多文字

但我需要这样的结果。

  

这是测试STRING REPLACED-STRING一些文字替换了一些文字

1 个答案:

答案 0 :(得分:0)

我会将REGEXP_REPLACEREGEXP_INSTR结合使用。我们的想法是使用REGEXP_REPLACE替换所有出现位置从REGEXP_INSTR开始返回(此处指定它应该返回搜索字符串的第二次出现)。

这个片段说明了这个想法:

regexp_replace(
  'This is test STRING STRING some text STRING some more text',
  'STRING',
  'REPLACED-STRING', 
  regexp_instr(
    'This is test STRING STRING some text STRING some more text',
    'STRING',
    1,2,1
  ), 
  0
)

注意:请仅将其理解为启动器 - 我知道它可以进行优化(并且应该是)。我希望它有所帮助;-) *乔斯特