2017-10-30 14 views
-2

「+」で区切られた表の列に文字列があります。私は重複を削除する必要があります。Regexp_replace:Oracleの「+」半角文字列から複製を削除

イラスト:

マイデータ:

a+a+a+b+b+c+c 

期待:

a+b+c 

は私がREGEXP_REPLACEと試みたが、それが予約されているよう+文字をエスケープすることはできません。

私は成功しましたcomma値を分離しましたが、+または?の値を分けてヘルプが必要です。 comma区切り値と

ワーキングコード:

SELECT REGEXP_REPLACE ('a,a,a,b,b,c,c', '([^,]+)(,\1)+', '\1') FROM DUAL; 
+3

あなたは+を脱出しようとしましたか? ( '+ \ 1)+'、 '\ 1') – marco

+1

@marcoあなたはカンマを忘れてしまった: '' a + a + b + b + c + c ' –

+0

ありがとうPaul、私は訂正しました – marco

答えて

1

をあなたはバックスラッシュでエスケープする必要があり、その正常値として予約文字を使用する必要がある場合。これはすべての予約文字に有効です。

\ 

あなたは、例えば

\+ 

...と、正規表現内の各カンマを置き換えることにより、既存のコードを変更することができます。

SELECT REGEXP_REPLACE('a+a+a+b+b+c+c', '([^\+]+)(\+\1)+', '\1') FROM DUAL; 
+1

'a + b + a + b + c + b + a + c'はどうですか?または 'ba + a'? – MT0

0

ちょうど+エスケープ:

SELECT REGEXP_REPLACE ('a+a+a+b+b+c+c', '([^\+]+)(\+\1)+', '\1') FROM DUAL; 
+1

あなたはエスケープするためにバックスラッシュを使用する必要があります。 –

+0

ありがとうございます。 – marco

関連する問題