2014年4月8日 星期二

CTE 遞迴

WITH CTE AS ( SELECT PostTitle , Keyword , 1 AS StartPos , -- 錨點起點         CHARINDEX(',',Keyword) AS EndPos -- 錨點終點 FROM @Temp UNION ALL SELECT PostTitle , Keyword , EndPos + 1 , -- 遞迴起點 CHARINDEX(',',Keyword,EndPos + 1) -- 遞迴終點 FROM CTE WHERE EndPos > 0 -- CHARINDEX() 大於 0 表示還有逗號存在,遞迴繼續跑,等於 0 則遞迴停止 ) SELECT PostTitle , SUBSTRING ( Keyword , StartPos , ISNULL -- 第一個參數假如為 NULL 就抓取第二參數來表示終點 ( NULLIF(EndPos,0) , -- 第一參數;利用 NULLIF() 把終點為 0 的值轉換成 NULL LEN(Keyword) + 1 -- 第二參數 ) - StartPos ) AS String FROM CTE ORDER BY PostTitle , StartPos -- 對起點進行排序,能確保關鍵字呈現順序

沒有留言: