SQL Server:轻松分割字符串变成列表(mssql 逗号分割)
分割字符串并将其转换为列表是经常用到的一种操作,特别是在与SQL Server和数据库进行操作时。作为一名SQL Server开发人员,本文展示了常见的几种方法来实现字符串分割。
首先,使用循环游标进行循环,然后使用CHARINDEX函数找到分割点,最后将字符串内容保存在一个表或变量中。
例如,在SQL Server中。 使用下面的代码进行循环:
declare @string varchar(500),
@list varchar(500), @i int,
@j int
set @string = 'A;B;C;D;E;F'set @list = ''
set @i = 1
WHILE @i BEGIN
-- find position of next semicolon SET @j = CHARINDEX(';', @string, @i )
-- save content into list IF @j > 0
BEGIN SET @list = @list + Stuff(@string, @i, @j-@i, '') + ','
END
SET @i = @j + 1 END
SELECT left(@list, len(@list)-1)
另一种变体方法是使用表值函数。表值函数是一种特殊的可以接受多个参数并返回一个表而不是一个值的SQL函数。表值函数已经从SQL Server 2008中引入,并从SQL Server 2012中推出。
下面的代码演示了如何使用表值函数将字符串分割为列表:
DECLARE @String varchar(500)
DECLARE @Delimiter char(1)
SET @String = 'A;B;C;D;E;F'SET @Delimiter = ';'
SELECT ItemFROM dbo.Split(@String, @Delimiter)
同样,也可以使用XML来分割字符串到列表。 使用XML允许更快更简单的分割。 例如:
DECLARE @String varchar(500)
SET @String = 'A;B;C;D;E;F'
SELECT x.value('.','varchar(50)') FROM
( SELECT cast('' + replace(@String,';', '') + '' as xml) as String
) as T1CROSS APPLY String.nodes('/X') as T2(x)
总之,有很多不同的方法可以实现字符串分割。 上面的例子已经展示了如何使用游标,表值函数和XML功能将字符串分割为列表。