Sql 如何将逗号分隔为条件中的数据集?

Sql 如何将逗号分隔为条件中的数据集?,sql,arrays,sql-server,Sql,Arrays,Sql Server,我对整个SQL都是新手。我有一个帐户id列表,我将其从Splunk转换为逗号分隔的字符串,并希望构建一个SQL查询,在这里我可以执行和接收该数组中的所有id。我尝试过这个,但它只返回第一个 代码 您可以尝试使用STRING\u SPLIT函数分割数据,然后在where子句中编写子查询 字符串\u拆分(字符串、分隔符) 我建议您使用exists SELECT [FirstName] ,[Surname] ,[Number] ,[Email]

我对整个SQL都是新手。我有一个帐户id列表,我将其从Splunk转换为逗号分隔的字符串,并希望构建一个SQL查询,在这里我可以执行和接收该数组中的所有id。我尝试过这个,但它只返回第一个

代码


您可以尝试使用
STRING\u SPLIT
函数分割数据,然后在
where
子句中编写子查询

字符串\u拆分(字符串、分隔符)

我建议您使用
exists

SELECT [FirstName]     
      ,[Surname]
      ,[Number]     
      ,[Email]
FROM customers 
where exists (select 1 
              from STRING_SPLIT(@accountIdlist,',')
              where accountid = value
             ) 
sqlfiddle:

编辑

如果您的sql server版本不支持
STRING\u SPLIT
,您可以自己编写
SPLIT

这是给你的样品

CREATE FUNCTION dbo.Spite_String  (@input varchar(max),@Split char(1))
RETURNS @rtnTable TABLE 
(
    Value varchar(1000)
)
AS
BEGIN
   DECLARE @XmlData xml;

   SELECT @XmlData = CONVERT(xml,'<root><s>' + REPLACE(@input,@Split,'</s><s>') + '</s></root>');

  insert into @rtnTable (Value)
  SELECT [Value] = T.c.value('.','varchar(1000)')
  FROM @XmlData.nodes('/root/s') T(c)
  return
END

SQLFIDLE:

使用SQL函数将varchar列表转换为临时表,并在结果集()上进行联接。

最简单的方法可能是使用
类似的

SELECT [FirstName], [Surname], [Number], [Email]
FROM customers 
WHERE ', ' + @accountIdList + ', ' LIKE '%, accountid, %' 
ORDER BY ID DESC; 

这肯定不是最有效的方法,但可能是最简单的实现方法。

虽然正确,而且我已经标记了,但OP可能没有拆分字符串函数,因此可能值得编辑答案以显示如何执行此操作。他们在2014年添加了此项功能……很好的发现
CREATE FUNCTION dbo.Spite_String  (@input varchar(max),@Split char(1))
RETURNS @rtnTable TABLE 
(
    Value varchar(1000)
)
AS
BEGIN
   DECLARE @XmlData xml;

   SELECT @XmlData = CONVERT(xml,'<root><s>' + REPLACE(@input,@Split,'</s><s>') + '</s></root>');

  insert into @rtnTable (Value)
  SELECT [Value] = T.c.value('.','varchar(1000)')
  FROM @XmlData.nodes('/root/s') T(c)
  return
END
SELECT [FirstName]     
      ,[Surname]
      ,[Number]     
      ,[Email]
FROM customers 
where exists (select 1 
              from Spite_String(@accountIdlist,',')
              where accountid = value
             ) 
SELECT [FirstName], [Surname], [Number], [Email]
FROM customers 
WHERE ', ' + @accountIdList + ', ' LIKE '%, accountid, %' 
ORDER BY ID DESC;