使用逗号分隔值的LIKE条件

时间:2014-07-11 13:17:26

标签: sql sql-server sql-like sql-in

这看起来很愚蠢,但我正在开发一个旧系统,我们没有单独的项目表。我们有一张这样的桌子。

|        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上尝试这个。

4 个答案:

答案 0 :(得分:1)

解决方案是使用多个LIKE条件:

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

答案 1 :(得分:1)

与逗号分隔的值除外。您将不得不为每个传入的值动态添加或条件。

必须采用以下形式:

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

答案 2 :(得分: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提示。

答案 3 :(得分:0)

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

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)