0

ソース列があり、05、5 971971、および 97105 で始まる文字列値を検索して、9715 に置き換えたいと考えています。出力テーブルに示すように。

SOURCE OUTPUT 0514377920 971514377920 544233920 971544233920 971971511233920 971511233920 9710511233920 971511233920

最初のケースで機能する以下を試しました。

SELECT REGEXP_REPLACE ('0544377905', '^(\05*)', '9715')FROM dual;

しかし、2番目のケースでは、以下は機能しません:

SELECT REGEXP_REPLACE ('544377905', '^(\5*)', '9715')FROM dual;

正規表現に何か問題があります。私が得ているように: ORA-12727: 正規表現の後方参照が無効です。

4

1 に答える 1

2

交互を使用して 4 つのパターンを指定できます。つまり、括弧内に縦線を挟んで:

with t(source) as (
  select '0514377920' from dual
  union all select '544233920' from dual
  union all select '971971511233920' from dual
  union all select '9710511233920' from dual
)
SELECT source, REGEXP_REPLACE (source, '^(05|5|9719715|97105)', '9715') as output
FROM t;

SOURCE          OUTPUT             
--------------- --------------------
0514377920      971514377920        
544233920       971544233920        
971971511233920 971511233920        
9710511233920   971511233920        

データやその他の制限によっては、5 を含む文字列の最初の部分を置き換えるだけで簡単に作成できる場合があります。これは、小さなサンプルで機能します。

SELECT source, REGEXP_REPLACE (source, '^.[^5]?5', '9715') as output
FROM t;

これは、5 以外の 0 個以上の文字の後に 5 が続くものと一致します。ただし、実際の状況では単純すぎるかもしれません。

于 2016-08-11T14:49:22.447 に答える