2016-06-22 20 views
0

値を区別し、文字列を使用して列を作成します。 私の文字列形式は以下の通りです:oracleの文字列から列を作成する

|| 1 | 21 | -1 | -1 | -1 | 0 ||||

私はすでにinstrまたはregexp_instrを使用しようとしましたが、一部の行の最初の文字がnullの場合、間違ったデータを返します。セパレータは '|' 。あなたはこの問題に私を助けることができれば

enter image description here

当然です。

+0

誰も助けることができますか? – arash

答えて

1

クエリ

WITH sample_data ("COMMENT") AS (
    SELECT '||1|21|-1|-1|-1|0||||' FROM DUAL 
) 
SELECT REGEXP_SUBSTR("COMMENT", '(.*?)(\||$)', 1, 1, NULL, 1) AS col1, 
     REGEXP_SUBSTR("COMMENT", '(.*?)(\||$)', 1, 2, NULL, 1) AS col2, 
     REGEXP_SUBSTR("COMMENT", '(.*?)(\||$)', 1, 3, NULL, 1) AS col3, 
     REGEXP_SUBSTR("COMMENT", '(.*?)(\||$)', 1, 4, NULL, 1) AS col4, 
     REGEXP_SUBSTR("COMMENT", '(.*?)(\||$)', 1, 5, NULL, 1) AS col5, 
     REGEXP_SUBSTR("COMMENT", '(.*?)(\||$)', 1, 6, NULL, 1) AS col6, 
     REGEXP_SUBSTR("COMMENT", '(.*?)(\||$)', 1, 7, NULL, 1) AS col7, 
     REGEXP_SUBSTR("COMMENT", '(.*?)(\||$)', 1, 8, NULL, 1) AS col8, 
     REGEXP_SUBSTR("COMMENT", '(.*?)(\||$)', 1, 9, NULL, 1) AS col9, 
     REGEXP_SUBSTR("COMMENT", '(.*?)(\||$)', 1, 10, NULL, 1) AS col10, 
     REGEXP_SUBSTR("COMMENT", '(.*?)(\||$)', 1, 11, NULL, 1) AS col11, 
     REGEXP_SUBSTR("COMMENT", '(.*?)(\||$)', 1, 12, NULL, 1) AS col12 
FROM sample_data; 

出力

COL1 COL2 COL3 COL4 COL5 COL6 COL7 COL8 COL9 COL10 COL11 COL12 
---- ---- ---- ---- ---- ---- ---- ---- ---- ----- ----- ----- 
      1 21 -1 -1 -1 0 
+0

多くのありがとうと感謝、それは同様に動作します.bestに関して – arash

+0

誰も私を助けることができますか? – arash

関連する問題