在WHERE子句中的CASE表达式中使用LIKE谓词

问题描述 投票:1回答:1

我有一张名字表:

约翰 彼得 彼得 - 保罗 玛丽

我有一个这些名称的下拉列表,我在顶部添加了“全部”作为选项。

我想将从下拉列表中选择的名称作为参数传递给where子句。

我想要做的只是如果名称没有作为'全'传递,则只有where子句

SELECT City, State
FROM EmployeeDetails
WHERE @NAME =
              CASE @NAME
                         WHEN 'All' THEN '1=1'
              ELSE (EmployeeDetails.NAME LIKE '' + @NAME + '%')

我不能让这个工作。 ELSE语句在单词'LIKE'附近给出错误'语法错误。 查看我发现的其他StackOverflow问题:

  1. CASE语句返回标量值,因此它不喜欢我的LIKE语句。
  2. 将ELSE子句放在单引号中不会返回结果(break where子句)
  3. 尝试执行IF(@NAME ='All')会破坏where子句,在StackOverflow的每个问题中,共识是将IF语句转换为CASE语句。

当运行不在CASE语句中的WHERE子句时,它适用于特定名称,例如:

WHERE (EmployeeDetails.NAME LIKE '' + @NAME + '%')

如果我搜索彼得,它会按预期返回2个结果。玛丽1结果等 我显然无法将“全部”传递给那个人。

sql case where sql-like
1个回答
6
投票

不要在case中使用where。简单地说:

SELECT City, State
FROM EmployeeDetails
WHERE (@NAME = 'All') OR (EmployeeDetails.NAME LIKE '' + @NAME + '%');

我不确定'' +的用途是什么,但你在问题中有它,所以我要离开了。

© www.soinside.com 2019 - 2024. All rights reserved.