这看起来很愚蠢,但我正在开发一个旧系统,我们没有单独的项目表。我们有一张这样的桌子。
| 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上尝试这个。
答案 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 |
感谢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)