热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

OracleSQL-通过串联行创建字符串,但不超过X个字符

如何解决《OracleSQL-通过串联行创建字符串,但不超过X个字符》经验,为你挑选了1个好方法。

首先,我尝试将行连接成用逗号分隔的字符串。其次,我不希望字符串超过X个字符数。如果要超过,则从下一行开始创建另一个字符串,而不从每行切开字符。我正在尝试通过oracle SQL实现此目的。

我正在查看LISTAGG,它为我提供了连接的字符串,但我不知道如何在不从每行中拆分值的情况下按X个字符拆分,比如说我的X = 15个字符。我使用以下代码得到的是

1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20

select listagg(x, ',') within group(order by x)
from (select level x from dual
      connect by level <= 20
      )
;

我的预期输出是

第1行:1、2、3、4、5、6、7、8(15个字符)

第2行:9,10,11,12,13(13个字符,因为如果我从下一行中添加值,则将超过15个字符)

第3行:14、15、16、17、18(14个字符)

第4行:19,20(5个字符)

我仍然不确定这是否可以实现,任何建议或暗示将不胜感激。



1> Tejash..:

我尝试了以下查询,并获得了预期的结果。

SELECT
    LISTAGG(X, ',') WITHIN GROUP(
        ORDER BY
            X
    ) as result
FROM
    (
        SELECT
            X,
            SUM(LENGTH(X)) OVER(
            ORDER BY
                X
            ) LENGTH_X,
            COUNT(1) OVER(
            ORDER BY
                X
            ) - 1 AS COMMAS
        FROM
            (
                SELECT
                    LEVEL   X
                FROM
                    DUAL
                CONNECT BY
                    LEVEL <= 20
            )
    )
GROUP BY
    CEIL((LENGTH_X + COMMAS) / 15);

输出:

db <> fiddle演示

干杯!!


推荐阅读
author-avatar
烛光一米_530
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有