我正在使用 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 ?
)
最佳答案
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;
MSSQL(>= SQL Server 2016):
自 SQL Server 2016 起,您可以使用 STRING_SPLIT
和 IN
来解决这个问题:
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) <> ''
);
关于sql - 如何从字符串格式的列表中执行 IN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49148687/