星期五, 9月 07, 2018

[SQL] 利用 STRING_SPLIT() 拆解特定符號隔離字串資料

在這篇文章 [SQL] 特定符號隔離字串資料 內是利用 CTE 來拆解資料,SQL Server 2016 新函數 - STRING_SPLIT() 可以更快速、簡潔達到相同效果

MSDN 回傳值說明
傳回有片段的單一資料行資料表。 資料行的名稱是 value。 如果任何輸入引數是 nvarchar 或 nchar,則傳回 nvarchar。 否則傳回 varchar。 傳回類型的長度與字串引數的長度相同。
DECLARE @Temp TABLE (PostTitle char(100),Keyword char(100))
INSERT INTO @Temp VALUES('[SQL] 模擬死結產生','SQL,DealLock')
INSERT INTO @Temp VALUES('[Windows] Win7 和 內碼輸入法','Windows 7,內碼,輸入法')
INSERT INTO @Temp VALUES('阿朗壹古道','CYMC,Hiking')
INSERT INTO @Temp VALUES('威力導演 9 - 直式相片模糊','威力導演,模糊,Video')
INSERT INTO @Temp VALUES('馬桶漏水','居家生活,馬桶,乾式安裝,漏水,HCG,和成')

SELECT 
  T.PostTitle ,
  SS.[value] AS String
FROM @Temp AS T
  CROSS APPLY STRING_SPLIT(T.Keyword, ',') AS SS
WHERE RTRIM(SS.[value]) <> ''
結果

MSDN 重點:排序
輸出資料列可能為任何順序。 子字串的順序「不」 保證與輸入字串的相同。 您可以在 SELECT 語句上使用 ORDER BY 子句來覆寫最後的排序次序,例如 ORDER BY value 或 ORDER BY ordinal 。
MSDN 重點:空字串
當輸入字串包含兩個或更多個連續出現的分隔符號字元時,會出現長度為零的空白子字串。 空白子字串視為純文字子字串來處理。 例如,您可以使用 WHERE 子句來篩選出包含空白子字串的任何資料列 WHERE value <> '' 。 如果輸入字串為 NULL ,STRING_SPLIT 資料表值函數會傳回空的資料表。

沒有留言:

張貼留言