📜  TSQL 函数拆分字符串 - SQL (1)

📅  最后修改于: 2023-12-03 15:05:38.103000             🧑  作者: Mango

TSQL 函数拆分字符串 - SQL

在 TSQL 中,有时需要将一个字符串拆分成多个子字符串,我们可以使用内置的字符串函数来实现,也可以自己编写 TSQL 函数来实现。本文介绍如何使用 TSQL 函数来拆分字符串。

使用内置函数拆分字符串

使用内置的字符串函数 SUBSTRINGCHARINDEXLEN 可以实现拆分字符串的功能。假设我们有一个字符串如下:

DECLARE @str VARCHAR(50) = 'A,B,C,D,E'

我们可以使用以下代码将该字符串拆分成五个子字符串:

SELECT 
    SUBSTRING(@str, 1, CHARINDEX(',', @str) - 1) AS Col1,
    SUBSTRING(@str, CHARINDEX(',', @str) + 1, CHARINDEX(',', @str, CHARINDEX(',', @str) + 1) - CHARINDEX(',', @str) - 1) AS Col2,
    SUBSTRING(@str, CHARINDEX(',', @str, CHARINDEX(',', @str) + 1) + 1, CHARINDEX(',', @str, CHARINDEX(',', @str, CHARINDEX(',', @str) + 1) + 1) - CHARINDEX(',', @str, CHARINDEX(',', @str) + 1) - 1) AS Col3,
    SUBSTRING(@str, CHARINDEX(',', @str, CHARINDEX(',', @str, CHARINDEX(',', @str) + 1) + 1) + 1, CHARINDEX(',', @str, CHARINDEX(',', @str, CHARINDEX(',', @str, CHARINDEX(',', @str) + 1) + 1) + 1) - CHARINDEX(',', @str, CHARINDEX(',', @str, CHARINDEX(',', @str) + 1) + 1) - 1) AS Col4,
    SUBSTRING(@str, CHARINDEX(',', @str, CHARINDEX(',', @str, CHARINDEX(',', @str, CHARINDEX(',', @str) + 1) + 1) + 1) + 1, LEN(@str) - CHARINDEX(',', @str, CHARINDEX(',', @str, CHARINDEX(',', @str, CHARINDEX(',', @str, CHARINDEX(',', @str) + 1) + 1) + 1) + 1) + 1) AS Col5

输出结果如下:

Col1    Col2    Col3    Col4    Col5
A       B       C       D       E

上述代码虽然能够实现拆分字符串的功能,但是当我们需要拆分的字符串长度和分隔符数量增加时,代码将变得越来越复杂和冗余。因此,我们可以编写一个 TSQL 函数来实现字符串拆分。

自定义函数拆分字符串

下面是一个自定义函数 fn_SplitString,可以有效地拆分字符串。该函数需要两个参数:需要拆分的字符串和分隔符。

CREATE FUNCTION fn_SplitString
(
    @str VARCHAR(MAX),
    @delimiter VARCHAR(1)
)
RETURNS @result TABLE (Value VARCHAR(MAX))
AS
BEGIN
    DECLARE @part VARCHAR(MAX)
    WHILE CHARINDEX(@delimiter, @str) > 0
    BEGIN
        SET @part = SUBSTRING(@str, 1, CHARINDEX(@delimiter, @str) - 1)
        SET @str = SUBSTRING(@str, CHARINDEX(@delimiter, @str) + 1, LEN(@str))
        INSERT INTO @result (Value) VALUES (@part)
    END
    INSERT INTO @result (Value) VALUES (@str)
    RETURN
END

使用上述函数可以更加简洁地拆分字符串,例如:

DECLARE @str VARCHAR(50) = 'A,B,C,D,E'
SELECT * FROM fn_SplitString(@str, ',')

输出结果如下:

Value
------
A
B
C
D
E
结论

使用 TSQL 函数可以更加方便、简洁地拆分字符串。虽然内置函数也可以实现拆分字符串的功能,但是当需要拆分的字符串长度和分隔符数量增加时,代码将变得越来越复杂和难以维护。