我想在使用LISTAGG
时将结果字符串限制为1000个字符。
以下是我的示例查询:
SELECT LISTAGG(EMPLOYEE_NAME,', ') WITHIN GROUP (ORDER BY EMPLOYEE_NAME) AS NAMES
FROM TB_EMPLOYEE;
如果NAMES大小超过1000个字符,我只想要1000个字符并忽略其余字符。
答案 0 :(得分:1)
将字符串截断为1000个字符的方法是:
SELECT SUBSTR(LISTAGG(EMPLOYEE_NAME,', ') WITHIN GROUP
(ORDER BY EMPLOYEE_NAME), 1, 1000) AS NAMES FROM TB_EMPLOYEE;
如果你想在运行时停止在长度条件下连接EMPLOYEE_NAME,你应该编写自己的PL \ SQL proc,LISTAGG汇总所有数据。
好的,如果您想在单个查询中进行,请尝试此操作。首先,计算所有连接字符串的总长度加上2,','符号:
SELECT EMPLOYEE_NAME, SUM(LENGTH(EMPLOYEE_NAME)+2) over (ORDER BY EMPLOYEE_NAME) FROM TB_EMPLOYEE;
然后为这个子查询调用LISTAGG:
SELECT LISTAGG(EMPLOYEE_NAME,', ') WITHIN GROUP
(ORDER BY EMPLOYEE_NAME) AS NAMES FROM (
SELECT EMPLOYEE_NAME, SUM(LENGTH(EMPLOYEE_NAME)+2) over
(ORDER BY EMPLOYEE_NAME) slide_length FROM TB_EMPLOYEE )
WHERE slide_length < 1000;