如何使用逗号分隔的值列表与SQL IN子句

时间:2015-10-07 14:40:55

标签: c# sql

我想在查询中为名称列应用SQL IN子句。我知道有一个选项'like'但是,在用户界面中,用户从多选下拉列表中选择客户名称,因此我有一个以逗号分隔的名称列表,例如'rocky,joni,david'和使用SQL IN列表需要像'rocky','joni','david'。如果我的问题不明确,请告诉我。

1 个答案:

答案 0 :(得分:4)

对于MS SQL Server,您可以使用拆分功能,例如下面的功能:https://stackoverflow.com/a/10914602/3854195

CREATE FUNCTION dbo.splitstring ( @stringToSplit VARCHAR(MAX) )
RETURNS
 @returnList TABLE ([Name] [nvarchar] (500))
AS
BEGIN

 DECLARE @name NVARCHAR(255)
 DECLARE @pos INT

 WHILE CHARINDEX(',', @stringToSplit) > 0
 BEGIN
  SELECT @pos  = CHARINDEX(',', @stringToSplit)  
  SELECT @name = SUBSTRING(@stringToSplit, 1, @pos-1)

  INSERT INTO @returnList 
  SELECT @name

  SELECT @stringToSplit = SUBSTRING(@stringToSplit, @pos+1, LEN(@stringToSplit)-@pos)
 END

 INSERT INTO @returnList
 SELECT @stringToSplit

 RETURN
END

然后您可以使用IN,因为该函数会将您的值作为表格返回。

DECLARE @CustomerList varchar(max)

/* Populate @CustomerList with your comma separated values  */

SELECT *
FROM Customers
WHERE CustomerName IN (
        SELECT [Name]
        FROM dbo.splitstring(@CustomerList)
        )