如何在Oracle中拆分逗号分隔的字符串

Sam*_*Sam 1 string oracle substr

如何使用SUBSTR和拆分Oracle中逗号分隔的字符串INSTR.

字符串'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
Run Code Online (Sandbox Code Playgroud)

对于第二个值,我在第二个逗号后得到整个字符串.

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,
Run Code Online (Sandbox Code Playgroud)

我想要每个逗号之后的值,比如

20.4

12.5

3.5等等.

rea*_*art 7

基于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  
Run Code Online (Sandbox Code Playgroud)

上面的查询遍历逗号分隔的字符串,搜索逗号(,)然后通过将逗号视为分隔符来拆分字符串.只要它到达分隔符,它就会将字符串作为一行返回.