📅  最后修改于: 2023-12-03 15:05:38.103000             🧑  作者: Mango
在 TSQL 中,有时需要将一个字符串拆分成多个子字符串,我们可以使用内置的字符串函数来实现,也可以自己编写 TSQL 函数来实现。本文介绍如何使用 TSQL 函数来拆分字符串。
使用内置的字符串函数 SUBSTRING
、CHARINDEX
和 LEN
可以实现拆分字符串的功能。假设我们有一个字符串如下:
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 函数可以更加方便、简洁地拆分字符串。虽然内置函数也可以实现拆分字符串的功能,但是当需要拆分的字符串长度和分隔符数量增加时,代码将变得越来越复杂和难以维护。