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

SQL Server 自訂 Split 字串分割函數:表值函數實作與使用範例

     編輯:關於SqlServer

需求背景

查詢統計需將分隔字串(如 'A:B:C:D:E')拆分為資料列,SQL Server 內建無 Split 函數,自行實作表值函數 (TVF) 解決。

函數定義

CREATE FUNCTION f_split (
    @SourceSql VARCHAR(8000),
    @StrSeprate VARCHAR(10)
)
RETURNS @temp TABLE (a VARCHAR(100))
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

使用方式

SELECT * FROM dbo.f_split('A:B:C:D:E', ':');

回傳結果:

a
A
B
C
D
E

效能與改進建議

  • WHILE 迴圈逐字元搜尋,長字串效能較差。
  • SQL Server 2016+ 內建 STRING_SPLIT 函數(原生優化),優先使用。
  • 舊版本可改用 XML 技巧或 Tally Table/Numbers Table 集合式寫法提升效能。
  • 回傳資料類型固定 VARCHAR(100),實務上可依需求調整為 NVARCHAR(MAX) 或加入欄位長度參數。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved