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

标签 sql sql-server t-sql

我正在使用 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;

demo: 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) <> ''
);

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

关于sql - 如何从字符串格式的列表中执行 IN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49148687/

相关文章:

sql-server - 更新年份?

sql-server - 应用默认约束时出错

sql - sql SELECT NULL 和 SELECT 1 的性能比较

sql - 将 SQL 数据从一个表移动到另一个表

python - 从 Python 调用时 SQL 存储过程未完成

t-sql - SSMS 15 设计器中的默认数据类型

sql-server - 合并语句和触发器 SQL Server 2012

mysql - 如何正确地将 "point"字段的值设置到MySql数据库表中?

sql - ORA-01810 : format code appears twice

mysql - 多行计算