带有逗号分隔值的 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 条件的主要内容,如果未能解决你的问题,请参考以下文章
如何使用带有逗号分隔值的单元格通过apps脚本创建动态下拉列表
使用 laravel 和 vue js 从 mysql 数据库中检查带有逗号分隔值的复选框
如何在laravel中使用逗号分隔值的列上使用'where'