在 Oracle 中制作逗号分隔的字符串
making comma separated string in Oracle
我们如何将 12345
转换为 1,2,3,4,5
.
我可以使用替换命令执行相反的操作,我可以用 null 替换逗号。但我无法做到以上几点。你能帮忙吗?
提前致谢
您可以使用 regexp_replace()
:
rtrim(regexp_replace('12345', '([0-9])', ','), ',')
rtrim()
是必需的,因为最后一位数字也被替换了。
在线示例:https://dbfiddle.uk/?rdbms=oracle_11.2&fiddle=724adecda03305b281ad3bf0f380ca58
如果您的固定模板包含连续的一位数字,例如 1234
或 12345
或 123456789
您可以使用 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
或
对于更通用的解决方案,请使用以下内容:
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
我们如何将 12345
转换为 1,2,3,4,5
.
我可以使用替换命令执行相反的操作,我可以用 null 替换逗号。但我无法做到以上几点。你能帮忙吗?
提前致谢
您可以使用 regexp_replace()
:
rtrim(regexp_replace('12345', '([0-9])', ','), ',')
rtrim()
是必需的,因为最后一位数字也被替换了。
在线示例:https://dbfiddle.uk/?rdbms=oracle_11.2&fiddle=724adecda03305b281ad3bf0f380ca58
如果您的固定模板包含连续的一位数字,例如 1234
或 12345
或 123456789
您可以使用 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
或
对于更通用的解决方案,请使用以下内容:
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