带有逗号分隔值的 LIKE 条件

Posted

技术标签:

【中文标题】带有逗号分隔值的 LIKE 条件【英文标题】:LIKE condition with comma separated values 【发布时间】:2014-09-02 03:17:34 【问题描述】:

这可能看起来很愚蠢,但我正在使用一个旧系统,我们没有单独的项目表。我们有一张类似这样的桌子。

|        PROJECTNAME | EMPID |
|--------------------|-------|
|     casio calc new |     1 |
|           calc new |     2 |
|               tech |     3 |
| financial calc new |     4 |
|              casio |     5 |

现在我们想要从上表中选择 EmpID,其中 ProjectName 可以是 casio 或 calc。我们有多个选择的用户输入,例如casio, calc。这意味着如果用户输入casio, calc,它应该会找到ProjectName LIKE '%casio%' OR '%calc%'

我真的不知道这怎么可能。

SELECT * FROM ProjectDetails
WHERE ProjectName LIKE 'casio, calc';

我搜索了SQL LIKE with IN,但找不到任何解决方案。有谁知道我怎样才能做到这一点?或者任何其他使用方法?我正在this fiddle 上尝试这个。

【问题讨论】:

Using SQL LIKE and IN together的可能重复 【参考方案1】:

给你。您可以在REPLACE 函数的帮助下创建一个动态查询,并稍微hack。然后使用EXEC 函数执行该查询。

DECLARE @str VARCHAR(MAX)
SELECT @str='casio,calc'

SELECT @str='LIKE ''%'+REPLACE(@str,',','%'' OR ProjectName LIKE ''%')+'%'''

EXEC('SELECT * FROM ProjectDetails WHERE
     ProjectName ' + @str +'');

输出:

|        PROJECTNAME | EMPID |
|--------------------|-------|
|     casio calc new |     1 |
|           calc new |     2 |
| financial calc new |     4 |
|              casio |     5 |

SQL Fiddle Demo

感谢Joe G Joseph 的提示。

【讨论】:

【参考方案2】:

解决办法是使用几个LIKE条件:

SELECT *
FROM ProjectDetails
WHERE ProjectName LIKE '%casio%'
OR ProjectName LIKE '%calc%';

【讨论】:

我只想添加一个提示,始终在 parenteshis 中放置或条件 :) 您好,请问有没有动态解决方案? @user3829465:SQL 不是动态语言,所以你的问题没有意义。你不是用真正的编程语言构建查询吗?如果没有,那么您需要了解如何在运行时在数据库中构建查询。我不知道 SQL Server 可以帮助你。 或者解析分隔的值列表。【参考方案3】:

除了逗号分隔的值之外,不喜欢。您将不得不为每个传入的值动态添加一个 or 条件。

它必须是以下形式:

ProjectName Like'%param1%' OR ProjectName Like '%param2%'

【讨论】:

【参考方案4】:

我们声明@str变量并存储我们要搜索的值,并使用REPLACE函数为每个值放置类似关键字,并将其分配给主查询并执行它,您可以获得结果

DECLARE @Query VARCHAR(MAX)
DECLARE @str VARCHAR(MAX)
SELECT @str='tech,casio, calc,casio calc new'
SELECT @str='LIKE ''%'+REPLACE(@str,',','%'' OR ProjectName LIKE ''%')+'%'''
set @Query ='SELECT * FROM ProjectDetails WHERE
     ProjectName  ' + @str
exec( @Query)

【讨论】:

以上是关于带有逗号分隔值的 LIKE 条件的主要内容,如果未能解决你的问题,请参考以下文章

如何使用带有逗号分隔值的 IIB 覆盖命令

如何使用带有逗号分隔值的单元格通过apps脚本创建动态下拉列表

使用 laravel 和 vue js 从 mysql 数据库中检查带有逗号分隔值的复选框

如何在laravel中使用逗号分隔值的列上使用'where'

LARAVEL 5.8 - 在 foreach 中使用数组的 WHERE LIKE 子句的多个条件没有给出完整的结果

查询字段值为逗号分隔的值