oracle pl/sqlでvarchar変数の一意の値を取得するにはどうすればよいですか? は、私はこのような変数があります:私はまだで区切られた一意の値を取得したいと思いoracle pl/sqlでvarchar変数のuniqe値を取得する方法
aa;bb;aa;cc;dd;ee;dd
を「;」。 希望の結果:
aa;bb;cc;dd;ee
これは可能ですか?ありがとう。
oracle pl/sqlでvarchar変数の一意の値を取得するにはどうすればよいですか? は、私はこのような変数があります:私はまだで区切られた一意の値を取得したいと思いoracle pl/sqlでvarchar変数のuniqe値を取得する方法
aa;bb;aa;cc;dd;ee;dd
を「;」。 希望の結果:
aa;bb;cc;dd;ee
これは可能ですか?ありがとう。
最初split your string、重複をフィルタリングし、(SQL Fiddleでの例)LISTAGG
を使用して、再びそれを組み合わせるためにDISTINCT
を使用することができます。
SELECT LISTAGG(x, ';') WITHIN GROUP(ORDER BY x)
FROM (
SELECT DISTINCT regexp_substr('aa;bb;aa;cc;dd;ee;dd', '[^;]+', 1, LEVEL) AS x
FROM dual
CONNECT BY regexp_substr('aa;bb;aa;cc;dd;ee;dd', '[^;]+', 1, LEVEL) IS NOT NULL
);
これは、Oracle 11gの場合には
aa;bb;cc;dd;ee
を返し、それ以上、あなたはこの
SELECT listagg(val,';') WITHin GROUP(ORDER BY NULL)
FROM
(SELECT DISTINCT REGEXP_SUBSTR('aa;bb;aa;cc;dd;ee;dd', '[^;]+', 1, LEVEL) val
FROM dual
CONNECT BY REGEXP_SUBSTR('aa;bb;aa;cc;dd;ee;dd', '[^;]+', 1, LEVEL) IS NOT NULL)
とXMLQUERYを使用することができます。
select xmlcast(xmlquery('let $i := string-join(distinct-values(ora:tokenize($doc,";")),";") return $i' passing 'aa;bb;aa;cc;dd;ee;dd' as "doc" returning content) as varchar2(4000)) from dual
あなたはこれを簡単にニラするREGEXPとWMSYS.WM_CONCAT(さえ その文書化されていない機能が)またはLISTAGGを使用することによって、これを達成することができます。 下記のスニペットをご覧ください。お役に立てれば。これは可能ではあるが、それはCSVにデータを保存するために、まったく本当に望ましくない
SELECT wm_concat(DISTINCT regexp_substr('aa;bb;aa;cc;dd;ee;dd','[^;]+', 1, level))
FROM dual
CONNECT BY regexp_substr('aa;bb;aa;cc;dd;ee;dd', '[^;]+', 1, level) IS NOT NULL;
wm_concatは使用しないでください。 OPはセミコロンを必要とするのに対し、カンマはデリミタとしてのみサポートします。 oracle [内部](https://support.oracle.com/epmos/faces/DocumentDisplay?id=1336219.1)でのみ使用される、文書化されていない関数です。そして、とりわけ、それは12cで中止されています。 – ruudvan
(SSV、セミコロン区切り)形式、それはあなたが結果を照会助けるためにあなたのデータベースは無力レンダリングするため。だから私はあなたのデータベースデザインを変更するために投票します。 –