如何在Where in Clause中使用字符串



我有一个存储过程,它接受一个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, ','));

最新更新