Oracle SQL查询,在每n个字符后将字符串转换为逗号分隔的字符串,并使用逗号

时间:2017-07-19 09:35:30

标签: sql oracle

如何在每n个字符后用逗号分隔任意长度的字符串为逗号分隔字符串。我正在使用Oracle 10g及更高版本。我尝试使用REGEXP_SUBSTR但无法获得所需的结果。

例如:每5个字符后面的下面的字符串逗号。

输入:

aaaaabbbbbcccccdddddeeeeefffff  

输出:

aaaaa,bbbbb,ccccc,ddddd,eeeee,fffff,  

aaaaa,bbbbb,ccccc,ddddd,eeeee,fffff

提前致谢。

3 个答案:

答案 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 ;