SQL Server 2016 前無內建 STRING_SPLIT,常需自行撰寫 Table-Valued Function 拆分字串。本文提供一個以 CHARINDEX + WHILE 迴圈實作的通用版本。
CREATE FUNCTION [dbo].[f_SplitToNvarchar] (
@SourceSql NVARCHAR(MAX), -- 來源字串
@StrSeprate VARCHAR(10) -- 分隔符
)
RETURNS @temp TABLE (col NVARCHAR(MAX))
AS
BEGIN
DECLARE @i INT;
SET @SourceSql = RTRIM(LTRIM(@SourceSql));
SET @i = CHARINDEX(@StrSeprate, @SourceSql);
WHILE @i >= 1 BEGIN
INSERT @temp VALUES (LEFT(@SourceSql, @i - 1));
SET @SourceSql = SUBSTRING(@SourceSql, @i + 1, LEN(@SourceSql) - @i);
SET @i = CHARINDEX(@StrSeprate, @SourceSql);
END
IF @SourceSql <> '' -- 處理最後一段
INSERT @temp VALUES (@SourceSql);
RETURN;
END;
GO
SELECT col FROM f_SplitToNvarchar('1,2,3,4', ',');

STRING_SPLIT(較快、原生支援)。理解自製 Split 邏輯,有助於維護舊系統或面試時手寫演算法。