如何从字符串格式的列表中进行IN

时间:2018-03-07 09:45:06

标签: sql sql-server tsql

我正在使用SQL management Studio 2014.我有SQL表格,如:

sql_Type | sql_Name | sql_Parent

我想让所有拥有特定父母的sql_Type。我的变量@listParents是nvarchar(MAX),包含用';'分隔的所有父项。

我该怎么办?我有一个开始,但我不知道在我的IN中写些什么:

DECLARE @listParents nvarchar(MAX) = 'Parent1;Parent2;Parent3;';

SELECT sql_Name
FROM [myTable]
WHERE sql_Type = 'Box' AND sql_Parent IN
(
    -- What should I do wjth @listParents ?
)

1 个答案:

答案 0 :(得分:4)

MSSQL(< SQL server 2016):

您可以使用CHARINDEX来解决此问题:

DECLARE @listParents nvarchar(MAX) = 'Parent1;Parent2;Parent3;'

SELECT sql_Name
FROM test
WHERE sql_Type = 'Box' AND CHARINDEX(sql_Parent + ';', @listParents) > 0;
  

演示: http://sqlfiddle.com/#!18/64a6b/10/0

MSSQL(> = SQL server 2016):

自SQL Server 2016起,您可以使用STRING_SPLITIN来解决此问题:

DECLARE @listParents nvarchar(MAX) = 'Parent1;Parent2;Parent3;'

SELECT sql_Name
FROM test
WHERE sql_Type = 'Box' AND sql_Parent IN (
    SELECT value  
    FROM STRING_SPLIT(@listParents, ';')  
    WHERE RTRIM(value) <> ''
);
  

演示: http://sqlfiddle.com/#!18/64a6b/9/0