4

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

|        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';

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

4

4 回答 4

1

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

SELECT *
FROM ProjectDetails
WHERE ProjectName LIKE '%casio%'
OR ProjectName LIKE '%calc%';
于 2014-07-11T13:22:01.927 回答
1

干得好。您可以在函数的帮助下创建一个动态查询,但REPLACE需要一点技巧。然后使用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 小提琴演示

感谢Joe G Joseph的提示。

于 2014-07-11T14:42:06.780 回答
1

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

它必须是以下形式:

ProjectName Like'%param1%' OR ProjectName Like '%param2%'
于 2014-07-11T13:24:02.607 回答
0

我们声明 @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)
于 2017-10-18T10:32:12.327 回答