あなたは(あなたの例では「S」)交換する一定の文字を持っている場合は、この使用することができます。
with test(string) as (select 'Root#root#abc#test#stest#s#beta#402' from dual)
select regexp_replace(string, '(.*)#(.*)#(.*)#(.*)#(.*)#s', '\1#\2#\3#\4#\5#S')
from test
これは、と5つのブロック内の文字列をカットすると「#」を終了します5番目のブロックの後の 's'を 'S'に置き換えます。
あなたも、あなたのための発生をカウントするために正規表現を使用することができます。
select regexp_replace(string, '(([^#]*#){5,5})s', '\1S')
from test
これを5回記述する必要なしに、ブロックの正確5出現をカウントします。異なるアプローチで
は、正規表現せずに、あなたが試すことができます:
select substr(string, 1, instr(string, '#', 1, 5)) ||
upper(substr(string, instr(string, '#', 1, 5)+1, 1)) ||
substr(string, instr(string, '#', 1, 5) + 2)
from test
これは単に3部内の文字列をカットする(第5回「#」にbegiggingから、次の文字、残りの部分を)文字のupper
を実行します。 これは異なる文字を扱うことができ、ハードコードする必要はありません
Thxあなたの答えは、regexpバージョンが私が探していたものでした。 – rainer