在 WHERE 子句的 CASE 表达式中使用 LIKE 谓词
Using LIKE predicate inside CASE expression in WHERE clause
我有 table 个名字:
约翰
彼得
彼得-保罗
玛丽
我有一个包含这些名称的下拉列表,我在顶部添加了 'All' 作为选项。
我想将从下拉列表中选择的名称作为参数传递给 where 子句。
如果名称未作为 'All'
传递,我要做的只是使用 where 子句
SELECT City, State
FROM EmployeeDetails
WHERE @NAME =
CASE @NAME
WHEN 'All' THEN '1=1'
ELSE (EmployeeDetails.NAME LIKE '' + @NAME + '%')
我无法让它工作。 ELSE 语句给出错误“单词 'LIKE'.
附近的语法不正确
查看我发现的其他 Whosebug 问题:
- CASE 语句 return 标量值,因此它不喜欢我的 LIKE 语句是有道理的。
- 将 ELSE 子句放在单引号中 return没有结果(中断 where 子句)
- 尝试执行 IF(@NAME = 'All') 会破坏 where 子句,并且在 Whosebug 上的每个问题中,共识是将 IF 语句转换为 CASE 语句。
当运行 WHERE 子句不在 CASE 语句中时,它适用于特定名称,例如:
WHERE (EmployeeDetails.NAME LIKE '' + @NAME + '%')
如果我搜索 Peter,它将 return 2 个符合预期的结果。玛丽1结果等
我显然不能将 'All' 传递给它。
不要在 where
中使用 case
。简单地做:
SELECT City, State
FROM EmployeeDetails
WHERE (@NAME = 'All') OR (EmployeeDetails.NAME LIKE '' + @NAME + '%');
我不确定 '' +
的目的是什么,但你的问题中有它,所以我不说了。
我有 table 个名字:
约翰
彼得
彼得-保罗
玛丽
我有一个包含这些名称的下拉列表,我在顶部添加了 'All' 作为选项。
我想将从下拉列表中选择的名称作为参数传递给 where 子句。
如果名称未作为 'All'
传递,我要做的只是使用 where 子句SELECT City, State
FROM EmployeeDetails
WHERE @NAME =
CASE @NAME
WHEN 'All' THEN '1=1'
ELSE (EmployeeDetails.NAME LIKE '' + @NAME + '%')
我无法让它工作。 ELSE 语句给出错误“单词 'LIKE'.
附近的语法不正确
查看我发现的其他 Whosebug 问题:
- CASE 语句 return 标量值,因此它不喜欢我的 LIKE 语句是有道理的。
- 将 ELSE 子句放在单引号中 return没有结果(中断 where 子句)
- 尝试执行 IF(@NAME = 'All') 会破坏 where 子句,并且在 Whosebug 上的每个问题中,共识是将 IF 语句转换为 CASE 语句。
当运行 WHERE 子句不在 CASE 语句中时,它适用于特定名称,例如:
WHERE (EmployeeDetails.NAME LIKE '' + @NAME + '%')
如果我搜索 Peter,它将 return 2 个符合预期的结果。玛丽1结果等
我显然不能将 'All' 传递给它。
不要在 where
中使用 case
。简单地做:
SELECT City, State
FROM EmployeeDetails
WHERE (@NAME = 'All') OR (EmployeeDetails.NAME LIKE '' + @NAME + '%');
我不确定 '' +
的目的是什么,但你的问题中有它,所以我不说了。