在Oracle中用逗号分隔的字符串

时间:2018-08-20 14:26:34

标签: sql oracle oracle11g oracle11gr2 listagg

我们如何将12345转换为1,2,3,4,5

我可以通过使用replace命令执行相反的操作,并且可以将null替换为逗号。但我无法做到以上几点。您能帮忙吗?

预先感谢

2 个答案:

答案 0 :(得分:5)

您可以使用regexp_replace()

rtrim(regexp_replace('12345', '([0-9])', '\1,'), ',')

rtrim()是必需的,因为最后一位也被替换了。

在线示例:https://dbfiddle.uk/?rdbms=oracle_11.2&fiddle=724adecda03305b281ad3bf0f380ca58

答案 1 :(得分:3)

如果您有一个固定的模板,其中包含连续的一位数字,例如123412345123456789

您可以使用Oracle的listagg函数尝试以下操作:

with t as
(
 select '12345' as col from dual 
)
select listagg(level,',') within group (order by level) as str
   from t
connect by level <= length(col);

STR
---------
1,2,3,4,5

SQL Fiddle Demo 1

OR

有关更通用的解决方案,请使用以下内容:

with t as
(
 select 'abcde' as col from dual 
)
select listagg(substr(col,level,1),',') within group (order by level) as str
   from t
connect by level <= length(col);

STR
---------
a,b,c,d,e

SQL Fiddle Demo 2