2016-09-03 9 views
-1

ORACLE REGEXP_REPLACE関数を使用して繰り返し文字を削除しようとしています。regexp_replace文字列を使用する

文字列は次のようになります。

("ABC","DEF,,,,",,,"111",,,"HI") 

出力は次のようになります。

("ABC","DEF,,,,","111","HI") 

これを実現するために、私はこれを削除して、次のコードに

SELECT REGEXP_REPLACE(("ABC","DEF,,,,",,,"111",,,"HI")','[,]{2,}','(,)) 
FROM DUAL; 

を試してみましたdoble quotesの中にカンマ。誰かが二重引用符ではない重複コンマを削除する方法を教えてもらえますか?

+0

究極の目標は何ですか?おそらく、最終結果を得るためのより良い方法があります。つまり、NULL列(連続するコンマ)があるスプレッドシートからデータを取得しているようです。これをsqlldrを介してテーブルに読み込むことになっている場合は、フィールド1,2,5および8だけを気にするならば、これは制御ファイルで処理できます。 –

+0

究極の目的は、繰り返しのカンマまたはいくつかの特別な文字を削除することです。入力文字列の二重引用符の外側に2倍以上を表示します。これはUIから取得しています。別の例を挙げてください。入力文字列は "AAAAA123 !!!!"、 "BBB"、!!!!!、 "CAAD"、!!!)です。出力は "AAAAA123 !!!!"、 "BBB"、!、 "CADD"、!)になります。私はregexp_replace文字列を使用してこれを達成したい。それは可能ですか?前もって感謝します。 – sen

+0

繰り返し文字はどこに導入されていますか? UIまたはユーザーですか? UIの下でデータベースからデータを抽出するプログラム?一度クリーンアップしたデータで何をしていますか?より大きなソリューションを提供するためには、大きな画像を共有してください。大きな画像を理解するのに役立ちます。 –

答えて

0
SELECT LISTAGG('"'||test||'"', ',') 
    WITHIN GROUP (order by r) "t" from 
(select rownum r ,regexp_substr(q'"ABC","DEF,,,,",,,"111",,,"HI"','[^"]+', 1, level) test from dual 
connect by regexp_substr(q'"ABC","DEF,,,,",,,"111",,,"HI"', '[^"]+', 1, level) is not null) 
where regexp_count(test, ',') != LENGTH(test) 

これは機能します。

+0

ありがとうございました。私はそれを試みてみましょう、また、上記の基準を達成するためにregexp replace関数を直接使用する方法があります。前もって感謝します。 – sen

関連する問題