📜  在 sql server 中用逗号分割字符串 - SQL (1)

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

在 SQL Server 中用逗号分割字符串 - SQL

在 SQL Server 中,经常需要将字符串拆分为不同的部分进行操作。其中,最常见的是使用逗号分隔的字符串。本文将介绍如何在 SQL Server 中使用逗号分割字符串。

解决方案

我们可以使用一些内置函数和技巧来解决这个问题。以下是几种最常见的方法。

方法1:使用内置函数

使用 SQL Server 内置的函数可以很容易地把逗号分隔的字符串转换为表格。

DECLARE @sampleString VARCHAR(100) = 'A,B,C,D,E'
SELECT value FROM STRING_SPLIT(@sampleString, ',')

这段代码使用 STRING_SPLIT 函数将字符串按逗号拆分成单个值的表格。输出如下:

value
-----
A
B
C
D
E
方法2:使用 XML 转换

另一种方法是使用 XML 的转换能力。我们可以将逗号分隔的字符串作为 XML 元素列表,然后使用 nodes() 来解析它们。

DECLARE @sampleString VARCHAR(100) = 'A,B,C,D,E'
SELECT c.value('text()[1]', 'VARCHAR(200)') AS value
FROM (
    SELECT CAST('<A>' + REPLACE(@sampleString, ',', '</A><A>') + '</A>' AS XML) AS string
) AS t
CROSS APPLY string.nodes('/A') AS x(c)

输出与上面相同:

value
-----
A
B
C
D
E
方法3:使用自定义函数

如果您需要经常使用这种操作,可以考虑创建自定义函数来简化它。以下是这种方法的示例:

CREATE FUNCTION [dbo].[SplitString]
(
    @string VARCHAR(8000),
    @delimiter CHAR(1)
)
RETURNS @temp TABLE 
(
    value VARCHAR(8000)
)
AS
BEGIN
    DECLARE @pos INT
    WHILE CHARINDEX(@delimiter, @string) > 0
    BEGIN
        SET @pos = CHARINDEX(@delimiter, @string)
        INSERT INTO @temp(value) VALUES (SUBSTRING(@string, 1, @pos-1))
        SET @string = SUBSTRING(@string, @pos+1, LEN(@string)-@pos)
    END
    INSERT INTO @temp(value) VALUES (@string)
    RETURN
END

函数创建后,您可以使用以下代码将逗号分隔的字符串作为参数传递:

DECLARE @sampleString VARCHAR(100) = 'A,B,C,D,E'
SELECT value FROM dbo.SplitString(@sampleString, ',')

输出与前面相同:

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

在 SQL Server 中使用逗号分隔的字符串可以使用几种不同的方法。我们可以使用内置函数、XML 转换或者自定义函数来实现这个操作。根据情况选择最适合您需要的方法。