如何使用LISTAGG使我的结果字符串长1000个字符

时间:2016-07-25 07:16:24

标签: sql oracle

我想在使用LISTAGG时将结果字符串限制为1000个字符。

以下是我的示例查询:

SELECT LISTAGG(EMPLOYEE_NAME,', ') WITHIN GROUP (ORDER BY EMPLOYEE_NAME) AS NAMES
FROM TB_EMPLOYEE;

如果NAMES大小超过1000个字符,我只想要1000个字符并忽略其余字符。

1 个答案:

答案 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;