我有一个存储过程,它接受一个varchar(1000(,其值将采用以下格式"000100020003,…"。字符串中可以有任意数量的逗号分隔代码。这个字符串可以在where in子句中使用吗?
Select * from class_codes where class_codes.codes in (codes_string)
如果没有,我们该怎么做才能使这个字符串在where in子句中可用?
方法1:如果您使用的是sql 2016版本或更高版本,则可以使用STRING_SPLIT函数
Select * from class_codes where class_codes.codes in (SELECT value FROM STRING_SPLIT(codes_string, ','));
方法2:如果您使用的sql版本低于2016,那么您可以使用此方法。您可以创建一个字符串拆分函数,如下所示,并在方法1中指定的查询中使用它。
CREATE FUNCTION [dbo].[STRING_SPLIT]
(
@InputString NVARCHAR(MAX),
@delimiter CHAR(1)
)
RETURNS @output TABLE(Value NVARCHAR(MAX) )
BEGIN
DECLARE @start INT, @end INT
SELECT @start = 1, @end = CHARINDEX(@delimiter, @InputString)
WHILE @start < LEN(@InputString) + 1 BEGIN
IF @end = 0
SET @end = LEN(@InputString) + 1
INSERT INTO @output (Value)
VALUES(SUBSTRING(@InputString, @start, @end - @start))
SET @start = @end + 1
SET @end = CHARINDEX(@delimiter, @InputString, @start)
END
RETURN
END
并在查询中使用此功能
Select * from class_codes where class_codes.codes in (SELECT value FROM STRING_SPLIT(codes_string, ','));