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

SQL Server 字串拆分函數實作教學:自訂 StringSplit 函數完整範例

     編輯:關於SqlServer

在資料庫開發工作中,經常會遇到需要將字串依特定分隔符號拆分為多行資料的需求。雖然 SQL Server 2016 版本之後內建了 STRING_SPLIT 函數,但在舊版本或特定業務邏輯下,自訂函數仍具彈性。本文分享一個實用的資料表值函數 StringSplit,可將輸入字串依指定分隔符拆分,並回傳資料表格式結果,方便後續查詢與聯集操作。

函數建立腳本

以下為完整的 T-SQL 建立腳本,可直接在 SSMS 執行:

CREATE FUNCTION [dbo].[StringSplit] (
    @str NVARCHAR(MAX),
    @spliter NVARCHAR(10)
)
RETURNS @tb TABLE (ch NVARCHAR(256))
AS
BEGIN
    DECLARE @Num INT, @Pos INT, @NextPos INT;
    SET @Num = 0;
    SET @Pos = 1;

    WHILE (@Pos <= LEN(@str))
    BEGIN
        SELECT @NextPos = CHARINDEX(@spliter, @str, @Pos);
        IF (@NextPos = 0 OR @NextPos IS NULL)
            SELECT @NextPos = LEN(@str) + 1;

        INSERT INTO @tb VALUES (RTRIM(LTRIM(SUBSTRING(@str, @Pos, @NextPos - @Pos))));
        SELECT @Pos = @NextPos + 1;
    END
    RETURN;
END

參數說明

  • @str:欲拆分的來源字串,支援 NVARCHAR(MAX) 長度。
  • @spliter:分隔符號,長度上限 10 字元,可為逗號、分號、管線符等。

使用範例

執行以下查詢:

SELECT * FROM dbo.StringSplit(N'計算機,IT,C#,SQL', N',');

輸出結果

ch
計算機
IT
C#
SQL

應用場景

  • 前端傳入多選值(如 "1,3,5")需轉為暫存表進行 IN 查詢。
  • ETL 流程中解析 CSV 欄位內的多值資料。
  • 動態 SQL 組裝時,將參數字串拆分為多行供 JOIN 使用。

效能提示

此函數採用 WHILE 迴圈搭配 CHARINDEX 逐段切割,適合中小資料量(< 1 萬筆)。若需處理大量資料,建議改用 XML 解析、JSON 函數(SQL 2016+)或 CLR 函數以提升效能。

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