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

SQL Server 自製 Split 函數:將分隔字串拆解為資料表值

     編輯:關於SqlServer

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', ',');

執行結果

Split 函數執行結果

效能與替代方案提醒

  • 此實作為 RBAR(Row-By-Agonizing-Row),大量資料效能較差。
  • SQL Server 2016+ 請直接使用 STRING_SPLIT(較快、原生支援)。
  • 舊版本可考慮 XML 法、Tally Table / Numbers Table 法、或 CLR 函數以提升效能。

理解自製 Split 邏輯,有助於維護舊系統或面試時手寫演算法。

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