2017-05-30 744 views
0

如何在Oracle中使用SUBSTRINSTR拆分逗號分隔的字符串。如何在Oracle中拆分逗號分隔的字符串

String '20.4,12.5,3.5,0.2,0.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 

第二個值我在第二個逗號後得到整個字符串。

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等。

+0

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

+0

我希望它不使用「正規」的功能。 – Sam

+0

爲什麼你不想使用正則表達式函數? – realbart

回答

2

基於https://blogs.oracle.com/aramamoo/how-to-split-comma-separated-string-and-pass-to-in-clause-of-select-statement

首先,我們將形成一個查詢,其將這個逗號分隔字符串,並給出了各個字符串作爲行。

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 

通過逗號分隔的字符串上面的查詢迭代,搜索逗號(,),然後通過處理逗號作爲分隔符分割的字符串。它將字符串作爲行返回,只要它碰到分隔符。