2017-07-18 12 views
0

のは、私はこのような文字列を持っていると仮定しましょう:CSV文字列をPL/SQLのマルチカラム結果に変換するにはどうすればよいですか?

a;b;c#d,e,f#g,h,i#j,k,l#m,n,o 

;は、列、行を分離するための#を分離するために使用されるので、その結果は、上記の例で、このような何かをする必要があります:

+---------+---------+---------+ 
| Column1 | Column2 | Column3 | 
+---------+---------+---------+ 
| a  | b  | c  | 
+---------+---------+---------+ 
| d  | e  | f  | 
+---------+---------+---------+ 
| g  | h  | i  | 
+---------+---------+---------+ 
| j  | k  | l  | 
+---------+---------+---------+ 

そして、私がタイトルに書いたように、期待される結果を与えるSQL SELECTを書くことができるのですか?

+1

私は多くのリソースを利用していますが、そのうちのどれかを試しましたか?一般に、CSVやその他の正規化されていないデータはテーブルに保存しないでください。 –

+0

私は残念ながら盲目でした:(私は**私の質問の答えを見ましたが、最初は私はそれを認識しませんでした**それは私の答えのための解決策**ですが、あなたのコメントのための "ありがとう"私はそれを2回目にチェックしています。 – Arklur

答えて

0

私は自分の問題を解決することができましたが、問題については申し訳ありません。ここにソリューションコードがありますが、将来的に他の人に役立つかもしれません:

WITH 
    splitted_rows as (
    SELECT TRIM(regexp_substr('a;b;c#d,e,f#g,h,i#j,k,l#m,n,o', '[^#]+', 1, LEVEL)) AS str 
     FROM dual 
    CONNECT BY LEVEL <= regexp_count('a;b;c#d,e,f#g,h,i#j,k,l#m,n,o', '#') + 1) 
SELECT regexp_substr(sr.str, '[^#]+', 1, 1) as column1 
     ,regexp_substr(sr.str, '[^#]+', 1, 2) as column2 
     ,regexp_substr(sr.str, '[^#]+', 1, 3) as column3 
    FROM splitted_rows sr 
関連する問題