0

テーブル内の約 35 列を単一の文字列に連結する必要があります。列内のデータは、以下のように、大文字と小文字が異なる繰り返しの場合があります。

COL_1
apple | ORANGE | APPLE | Orange 

COL_2
GRAPE | grape | Grape

各列のデータはパイプで区切られており、各列を で区切って連結しようとしてい'|'ます。最終的な出力は次のようになると思います"apple | orange | grape"(すべて小文字で問題ありません)

しかし、現在私は得ています

apple | ORANGE | APPLE | Orange | GRAPE | grape | Grape

私の現在のSQLは

SELECT COL_1 || '|' || COL_2 from TABLE_X;

各列から一意の値を抽出する方法を説明してもらえますか? これにより、文字列の長さが大幅に短縮されます。私の現在の SQL は、Oracle の 4000 文字の制限を超えています。

4

1 に答える 1

0

私はこれをやってみました

WITH test AS ( SELECT 'Test | test | Test' str FROM dual ) SELECT * FROM (SELECT DISTINCT(LOWER(regexp_substr (str, '[^ | ]+', 1, rownum))) split FROM test CONNECT BY level <= LENGTH (regexp_replace (str, '[^ | ]+')) + 1 ) WHERE SPLIT IS NOT NULL;

このクエリは「test」のみを生成します

' | で区切られた文字列を分割した後、一意の値を生成する方法 ' 列に。しかし、単一の SQL クエリで 35 以上の列に対してこれを行うのは面倒です。誰かがより良いアプローチを提案できますか?

于 2014-05-25T22:10:29.130 に答える