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