2013-08-26 46 views
0

我想使用regexp_replace來替換除第一次出現以外的所有字符串。下面的查詢將只替換第二次出現。Oracle正則表達式regexp_replace每次發生

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一些文字

回答

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 
) 

注:請理解這只是作爲首發 - 我知道,它可以優化(也應該)。我希望它有一點幫助;-) * Jost

+0

謝謝。之所以能夠通過修改來選擇REGEXP_REPLACE做( '這是測試字符串STRING一些文本字符串一些文字', 'STRING', 'REPLACED-STRING', REGEXP_INSTR( 「這是測試字符串STRING一些文本字符串一些更多的文字', 'STRING',)+6,)from dual –