Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle SQL-通过连接行创建字符串,但不超过X个字符数_Sql_Oracle - Fatal编程技术网

Oracle SQL-通过连接行创建字符串,但不超过X个字符数

Oracle SQL-通过连接行创建字符串,但不超过X个字符数,sql,oracle,Sql,Oracle,首先,我尝试将行连接成以逗号分隔的字符串。其次,我不希望字符串超过X个字符。如果要超过,则从下一行开始创建另一个字符串,而不从每行切分字符。我正试图通过oracle SQL实现这一点 我在看Listag,它给了我连接的字符串,但我不知道如何在不拆分每行的值的情况下拆分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

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

我在看Listag,它给了我连接的字符串,但我不知道如何在不拆分每行的值的情况下拆分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个字符,因为如果我从下一行添加值,将超过15个字符

第3行:14,15,16,17,18 14个字符

第4行:19,20 5个字符


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

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

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);
输出:


干杯

我相信解决这个问题的唯一方法是使用递归CTE或分层查询。你用的是什么数据库?我用的是oracle数据库谢谢,这正是我要找的for@tejash-ora-00980有趣的是,当我尝试按255个字符分割时,它失败了,其中每个记录的X长度为9个字符。我认为只需更改拆分字符限制就可以应用相同的查询,但事实并非如此,您能否建议缺少哪些内容。您能否在dbfiddle上提供包含失败结果的示例数据?