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



我有一个名称表:

约翰
彼得
彼得·保罗
玛丽

我有一个这些名字的下拉列表,并在顶部添加了"全部"选项。

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

我想做的是,如果名称没有作为"All"传递,则只有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子句放在单引号中不会返回任何结果(打断where子句(
  3. 尝试执行IF(@NAME='All'(会破坏where子句,在StackOverflow上的每个问题中,共识是将IF语句转换为CASE语句

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

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

如果我搜索Peter,它会像预期的那样返回2个结果。Mary 1的结果等等。
我显然不能把"全部"都忽略掉。

不要在where中使用case。简单操作:

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

我不确定'' +的目的是什么,但你的问题中有它,所以我离开它。

最新更新