2016-08-11 5 views
0

私はソース列を持っており、05、5 971971および97105から9715に置き換えられる文字列値を検索したいと思います。出力表に表示します。オカレンスをOracle SQLの文字列の先頭に置き換える方法は?

SOURCE OUTPUT 0514377920 971514377920 544233920 971544233920 971971511233920 971511233920 9710511233920 971511233920

私は、最初のケースのために働く、以下を試してみました。

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

しかし、次は、第二のケースのために、機能していません。

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

何かが私の正規表現が間違っています。 ORA-12727:正規表現でバック・リファレンスが無効です。

+0

第3のパターン「971971」は '9719715'ですか?一般化することができますか?文字列の最初の5文字までをすべて置き換えようとしていますか、たとえば、最後の8文字は任意の値にします。または変更したくない他の値がありますか? –

+0

これを制御できる場合は、データモデルを修正する方がよいでしょう。電話番号の列は1つではなく、国コードの場合は1つ、地域(地域、地域など)コードの場合は1つ、実際の番号の場合は1つの番号が必要です。残念なことに、ここに投稿する人は、そのような変更を行うのに十分な力がありません... – mathguy

答えて

2

alternationを使用して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   

は、あなたのデータ、あなたが持っている任意の他の制限によっては、あなたが持っている任意の文字列の最初の部分を交換するとして、それは同じくらい簡単にすることができるかもしれ

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

しかしあなたの本当の状況に単純すぎるかもしれ5.続く、5でない、ゼロ以上の文字に一致します。あなたの小さなサンプルのために働くことで5、。

関連する問題