如何使用SQL服务器用逗号分隔字符串?



我想用逗号分隔字符串。实际上我想过滤WHERE子句,例如

CREATE PROC spGetRecords
@class varchar(50)
AS
BEGIN
SELECT *
FROM SampleTable
WHERE class in (@class)  --in Database class is an integer
END

所以,我想在执行查询时传递参数,如下所示

spGetRecords @class = '12,22,45,66'

我认为在我的情况下不可能在单个参数中传递多个值。

那么,如果我删除','分隔字符串,那么我可以在 while 循环中运行我的查询,这将使记录正确?

那么,如何用逗号分隔字符串

您可以尝试使用 xml 路径进行拆分,如下所示:

Declare @delimiter nvarchar(max) = ','
Declare @str nvarchar(max) = '12,22,45,66'
Declare @xml as xml
Select @xml = CAST('<x>' + REPLACE((SELECT REPLACE(@str,@delimiter,'$$$SSText$$$') AS [*] FOR XML PATH('')),'$$$SSText$$$','</x><x>')+ '</x>' AS XML) 
--select @xml
Select y.value(N'text()[1]', N'nvarchar(MAX)') as value 
FROM @xml.nodes(N'x') as x(y) 

如果您在 SQL Server>= 2016 中,则可以按如下方式使用 STRING_SPLIT():

Select * from string_split('12,22,45,66',',')

使用动态 SQL

exec 'SELECT * FROM SampleTable WHERE class in (' + @class + ')'

它将把字符串修补在一起,然后像这样执行它:

SELECT * FROM SampleTable WHERE class in (12,22,45,66)

这是一个很好的解决方案 - 在SQL中将字符串列表转换为Int List。这里的想法是将 int 列表作为 XML 参数发送到存储过程。

这是另一个快速但肮脏的解决方案 - t-sql 将逗号分隔的字符串转换为 int,而无需使用用户创建的函数。此处,传入的值在动态 sql 语句中使用。

更多想法 - http://sql-articles.com/scripts/function-to-split-comma-separated-string-to-integer/

最新更新