首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

SQL Server 字串分割函數實作與應用

     編輯:MySQL 資料庫相關知識

方法一:使用暫存表模擬陣列回傳分割結果

建立函數 f_split,接受字串與分隔符,回傳資料表型別結果:

CREATE FUNCTION f_split(@c VARCHAR(2000), @split VARCHAR(2))
RETURNS @t TABLE (col VARCHAR(20))
AS
BEGIN
    WHILE (CHARINDEX(@split, @c) > 0)
    BEGIN
        INSERT @t(col) VALUES (SUBSTRING(@c, 1, CHARINDEX(@split, @c) - 1))
        SET @c = STUFF(@c, 1, CHARINDEX(@split, @c), '')
    END
    INSERT @t(col) VALUES (@c)
    RETURN
END
GO

-- 測試
SELECT * FROM dbo.f_split('dfkd,dfdkdf,dfdkf,dffjk', ',')
/* 結果:
col
--------------------
dfkd
dfdkdf
dfdkf
dffjk
*/

方法二:計算分割後元素個數

函數 get_strarraylength 透過計算分隔符出現次數 + 1 取得元素數量:

CREATE FUNCTION get_strarraylength(
    @str VARCHAR(1024),  -- 待分割字串
    @split VARCHAR(10)   -- 分隔符
)
RETURNS INT
AS
BEGIN
    DECLARE @location INT, @start INT, @length INT
    SET @str = LTRIM(RTRIM(@str))
    SET @location = CHARINDEX(@split, @str)
    SET @length = 1
    WHILE @location <> 0
    BEGIN
        SET @start = @location + 1
        SET @location = CHARINDEX(@split, @str, @start)
        SET @length = @length + 1
    END
    RETURN @length
END
GO

-- 呼叫範例
SELECT dbo.get_strarraylength('78,1,2,3', ',')  -- 回傳 4

補充說明

  • SQL Server 2016+ 內建 STRING_SPLIT() 函數,效能更佳,建議優先使用。
  • 若需保留順序,可搭配 ROW_NUMBER() 過濾。
  • 分隔符支援多字元,但需注意 CHARINDEX 行為。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved