首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> DB2 資料庫 >> DB2 教學

DB2 遞歸 CTE 實現字串分割:取得逗號分隔的最後一段

     編輯:DB2 教學

在 DB2 中處理字串分割並非內建單一函式即可完成,但善用遞歸 CTE (Common Table Expression) 卻能輕鬆達到目的。本文示範如何以遞歸查詢切分逗號分隔字串,並精準取得最後一段內容。

核心邏輯:遞歸 CTE 逐步定位分隔符

以下 SQL 以 WITH n(str, ori, pos) AS (...) 定義遞歸集合:

  • str:原始字串 'aa,bb,cc,dd,'
  • ori:目前片段起始位置
  • pos:下一個逗號的位置 (以 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。

應用場景與提示

  • 適用於 DB2 LUW 9.7+ 及 Db2 for i 7.1+
  • 若字串不以分隔符結尾,需先 CONCAT(str, ',') 再處理
  • 大量資料建議改用 XMLTABLE 或自訂 UDF 提升效能

掌握遞歸 CTE 分割技巧,不只能解決「取最後一段」需求,更能延伸至任意第 N 段、轉行轉列等進階字串操作。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved