在 DB2 中處理字串分割並非內建單一函式即可完成,但善用遞歸 CTE (Common Table Expression) 卻能輕鬆達到目的。本文示範如何以遞歸查詢切分逗號分隔字串,並精準取得最後一段內容。
以下 SQL 以 WITH n(str, ori, pos) AS (...) 定義遞歸集合:
'aa,bb,cc,dd,'POSSTR / LOCATE 取得)遞歸部分 UNION ALL SELECT str, pos+1, LOCATE(',', str, pos+1) FROM n WHERE LOCATE(',', str, pos+1) > 0 會不斷向後尋找下一個逗號,直到找不到為止。
最終查詢:
SELECT str, ori, pos, SUBSTR(str, ori, pos-ori) AS result
FROM n
ORDER BY pos DESC
FETCH FIRST 1 ROWS ONLY;
以 pos DESC 排序並取第一筆,即為最後一個逗號之前的片段 —— dd。
CONCAT(str, ',') 再處理XMLTABLE 或自訂 UDF 提升效能掌握遞歸 CTE 分割技巧,不只能解決「取最後一段」需求,更能延伸至任意第 N 段、轉行轉列等進階字串操作。