【发布时间】:2021-03-06 16:45:07
【问题描述】:
我想要实现的是使用回车连接长度不超过 10 的字符串。如果该行的长度超过 10,则应将其添加到下一个串联行。
例如,有以下数据集
SELECT '0123' col FROM DUAL
UNION ALL
SELECT '45 67' FROM DUAL
UNION ALL
SELECT '89A' FROM DUAL
UNION ALL
SELECT 'BC' FROM DUAL
UNION ALL
SELECT 'DEFGHI' FROM DUAL
我对结果的期望
SELECT '0123
45 67' col FROM DUAL
UNION ALL
SELECT '89A
BC' FROM DUAL
UNION ALL
SELECT 'DEFGHI' FROM DUAL
我正在运行 oracle 12.1,由于性能原因,我不想在 PLSQL 中执行此操作。我正在处理更高的数字。 我发布了一个简单的例子,这样会更容易。我的最终目标是以某种方式使用 listagg ,其中每行最多有 4k 个字符
【问题讨论】:
-
如果要回车,则需要将 CHR(13) 连接到字符串。奖励拆分字符串并添加到下一行,我不知道如何在直接 SQL 中完成,但也许比我更聪明的人有一个解决方案......你在谈论多少行,多久做一次你需要这样做吗?
-
“处理更高的数字”是什么意思?数千?百万?你将如何控制数据的顺序?您可能需要的不仅仅是一列来确保预期的顺序。源表是否以任何方式编入索引?
-
1. newline 需要使用什么字符(或多个字符)?
chr(10)单独,在 Oracle 中是标准的,在 Unix 中是行终止符?或者chr(13) || chr(10)在 DOS/Windows 中?或者是其他东西? 2. 你还需要在字符串末尾添加换行符吗? 3. 您的 Oracle 版本是多少? 4. 如果输入字符串(在单行中)已经长于限制,应该怎么办?也许在您的实际用例(4000,而不是 10)中不会发生,但它可能仍然是一个问题 如果您必须在末尾添加换行符(请参阅前面的问题)。
标签: sql string oracle aggregate-functions