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

时间:2018-11-15 15:54:23

标签: sql case where sql-like

我有一张名字表:

John
彼得
彼得·保罗
玛丽

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

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

我要尝试做的只有在name不以'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个预期结果。玛丽1结果,等。
我显然无法通过“全部”。

1 个答案:

答案 0 :(得分:6)

请勿在{{1​​}}中使用case。只需:

where

我不确定SELECT City, State FROM EmployeeDetails WHERE (@NAME = 'All') OR (EmployeeDetails.NAME LIKE '' + @NAME + '%'); 的目的是什么,但是您有疑问吗,所以我将其保留。