如何在每n个字符后用逗号分隔任意长度的字符串为逗号分隔字符串。我正在使用Oracle 10g及更高版本。我尝试使用REGEXP_SUBSTR但无法获得所需的结果。
例如:每5个字符后面的下面的字符串逗号。
输入:
aaaaabbbbbcccccdddddeeeeefffff
输出:
aaaaa,bbbbb,ccccc,ddddd,eeeee,fffff,
或
aaaaa,bbbbb,ccccc,ddddd,eeeee,fffff
提前致谢。
答案 0 :(得分:2)
这可以使用regexp_replace来完成,如下所示:
columns
regexp_replace只查找任意5个字符(WITH sample_data AS (SELECT 'aaaaabbbbbcccccdddddeeeeefffff' str FROM dual UNION ALL
SELECT 'aaaa' str FROM dual UNION ALL
SELECT 'aaaaabb' str FROM dual)
SELECT str,
regexp_replace(str, '(.{5})', '\1,')
FROM sample_data;
STR REGEXP_REPLACE(STR,'(.{5})','\
------------------------------ --------------------------------------------------------------------------------
aaaaabbbbbcccccdddddeeeeefffff aaaaa,bbbbb,ccccc,ddddd,eeeee,fffff,
aaaa aaaa
aaaaabb aaaaa,bb
),然后用相同的5个字符和逗号替换它们。 .{5}
周围的括号将其转换为带标签的子表达式.{5}
,因为它是第一组括号 - 然后我们可以使用它来代表替换部分中的5个字符。
如果需要,您需要从结果字符串中删除额外的逗号。
答案 1 :(得分:0)
SELECT RTRIM ( REGEXP_REPLACE('aaaaabbbbbcccccdddddeeeeefffff', '(.{5})' ,'\1,') ,',') replaced
FROM DUAL;
答案 2 :(得分:0)
这对我有用:
WITH strlen AS
(
SELECT 'aaaaabbbbbcccccdddddeeeeefffffggggg' AS input,
LENGTH('aaaaabbbbbcccccdddddeeeeefffffggggg') AS LEN,
5 AS part
FROM dual
)
,
pattern AS
(
SELECT regexp_substr(strlen.input, '[[:alnum:]]{5}', 1, LEVEL)
||',' AS line
FROM strlen,
dual
CONNECT BY LEVEL <= strlen.len / strlen.part
)
SELECT rtrim(listagg(line, '') WITHIN GROUP (
ORDER BY 1), ',') AS big_bang$
FROM pattern ;