【问题标题】:LIKE condition with comma separated values带有逗号分隔值的 LIKE 条件
【发布时间】: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 上尝试这个。

【问题讨论】:

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


【解决方案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)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-08-22
        • 1970-01-01
        • 2019-01-22
        相关资源
        最近更新 更多