2016-07-25 30 views
0

我想我的結果字符串限制爲1000個字符,當我使用LISTAGG如何使我的結果字符串1000個字符長的使用LISTAGG

這裏是我的示例查詢:

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

如果names規模超過1000個字符長,我只是想只有1000個字符,而忽略剩餘。

+1

當前的查詢可以得到更多然後4000個字符(或32c在12c),拋出一個錯誤?你想停止中間名,還是在完全適合的姓氏後面?你正在生產的價值似乎並不是很有用,儘管... –

回答

1

途徑TRUNC字符串1000個字符是:

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

如果你希望停止運行conacatenating的長度條件EMPLOYEE_NAME,你應該寫自己的PL \ SQL PROC,LISTAGG concats所有數據。

好吧,如果你想讓它在單一的查詢,試試這個。首先,calc下所有連接字符串的總長度加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; 
+0

謝謝你..只有在TB_EMPLOYEE中的行數有限時,你纔有效。但是如果表格包含10萬條記錄,則會導致錯誤。 –

相關問題