首先,我尝试将行连接成用逗号分隔的字符串。其次,我不希望字符串超过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个字符)
我仍然不确定这是否可以实现,任何建议或暗示将不胜感激。
我尝试了以下查询,并获得了预期的结果。
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演示
干杯!!