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



我正在使用SQL管理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 ?
)

MSSQL (

您可以使用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

最新更新