2017-05-30 23 views
0

SUBSTRINSTRを使用して、カンマ区切りの文字列をOracleで分割する方法。コンマで区切られた文字列をOracleで分割する方法

文字列'20 .4,12.5,3.5,0.2,0.2 '

私は以下のコードを使用しようとしましたが、2番目のカンマの後に値を取得できません。

SELECT substr('20.4,12.5,3.5,0.2,0.2',0,instr('20.4,12.5,3.5,0.2,0.2',',')-1) 
value FROM dual -- 1. 20.4 

第2の値については、第2カンマの後に文字列全体が表示されます。

SELECT substr('20.4,12.5,3.5,0.2,0.2',instr('20.4,12.5,3.5,0.2,0.2',',')+1,instr('20.4, 
12.5,3.5,0.2,0.2',',',2,2)-1) st FROM dual -- result : 12.5,3.5, 

私は

20.4

12.5

3.5などのように、各コンマの後に値を求めています。 https://blogs.oracle.com/aramamoo/how-to-split-comma-separated-string-and-pass-to-in-clause-of-select-statementに基づい

+0

https://stackoverflow.com/questions/26878291/split-string-by-delimiter-position-using-oracle-sql – realbart

+0

「REGEXP」機能を使用しないと、私はそれを必要とします。 – Sam

+0

なぜregexp関数を使いたくないのですか? – realbart

答えて

2

まず、我々はこのカンマ区切りの文字列を分割し、行として、個々の文字列を与えるクエリを、形成することになります。カンマで区切られた文字列を介して

SQL> select regexp_substr('20.4,12.5,3.5,0.2,0.2','[^,]+', 1, level) from dual 
    connect by regexp_substr('20.4,12.5,3.5,0.2,0.2', '[^,]+', 1, level) is not null; 


REGEXP_SUBSTR('20.4,1 
--------------------- 
20.4     
12.5     
3.5     
0.2     
0.2 

上記クエリ反復は、カンマ(、)を検索した後、区切り文字としてカンマを処理することにより、文字列を分割します。区切り文字に当たったときはいつでも、文字列を行として返します。

関連する問題