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

4

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

字符串是'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等等。


请参见以下链接:https://dev59.com/HF8d5IYBdhLWcg3wYxc- - realbart
我想不使用 "REGEXP" 函数实现。 - Sam
为什么你不想使用正则表达式函数? - realbart
我正在使用正则表达式获取结果。我正在尝试是否有可能不用正则表达式获取结果。 - Sam
SELECT REGEXP_SUBSTR ('20.4 12.5 3.5 0.2 0.2', '(\S*)(\s)', 2, 1) FROM dual; - Sam
3个回答

11

基于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  

以上查询遍历逗号分隔的字符串,查找逗号 (,) ,并将逗号视为分隔符拆分字符串。每当它遇到一个分隔符时,它就会将该字符串作为一行返回。


3
您还可以检查特定的出现次数,样本,甚至是逗号之间的第二个出现次数。
SQL> select regexp_substr('20.4,12.5,3.5,0.2,0.2','[^,]+[^,]', 1,2 ) as 2nd_occur 
     from dual;

 ", 1,2 )" -- You can replace this query part to choose with occurrence you want, like 

 ", 1,3 )" -- for third occurrence.`


Output:

2nd_occur
---------
12.5

1
如果您的数据库中安装了APEX 5.1或更高版本,则可以使用apex_string.split来解决这个问题,这样做非常简洁优雅。
select column_value
from table(apex_string.split('20.4,12.5,3.5,0.2,0.2', ','))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接