SQL语句中where子句中的Case和LIKE用法

4

我一直在为此苦恼,希望这是可能的。

declare @locationType varchar(50);
declare @SearchTerm NVARCHAR(100);

SELECT column1, column2
FROM whatever
WHERE
CASE @locationType
    WHEN 'location' THEN account_location LIKE @SearchTerm
    WHEN 'area' THEN Area LIKE @SearchTerm
    WHEN 'division' THEN xxx_location_division LIKE @SearchTerm
END

我从这里复制了相关帖子中的代码。

但我遇到了如下错误:

关键字 'LIKE' 附近有语法错误。

2个回答

6
declare @locationType varchar(50);
declare @SearchTerm NVARCHAR(100);

SELECT column1, column2
FROM whatever
WHERE
   (@locationType = 'location' AND account_location LIKE @SearchTerm)
OR
   (@locationType = 'area' AND Area LIKE @SearchTerm)
OR
   (@locationType = 'division' AND xxx_location_division LIKE @SearchTerm)

请确保@SearchTerm%开头/结尾-> 或使用'%' + @SearchTerm + '%'。更多关于LIKE操作符的信息。
SELECT column1, column2
FROM whatever
WHERE
(
  CASE @locationType
     WHEN 'location' THEN account_location
     WHEN 'area' THEN Area
     WHEN 'division' THEN xxx_location_division
  END
) LIKE @SearchTerm

所以 LIKEWHERECASE 不能同时使用?你的意思是以 / 开头并以 % 结尾,对吗? - Deeptechtons
是的,我犯了一个错误,应该用“==”。如果你在寻找以“NEW”开头的地方,那么@SearchTerm 应该是“NEW%”。 - Francois
@FrancoisB. 使用此查询无法选择有效的区域位置记录,真是令人震惊。 - Deeptechtons
CASE 不能用于返回搜索条件(例如 account_location LIKE @SearchTerm)。这是我猜测数据库分析/理解您的查询方式。请查看我的更新答案。 - Francois

0

如果您不需要检查字符串之间的内容,则可以像下面这样进行技巧:

SELECT column1, column2 
FROM whatever 
WHERE @SearchTerm LIKE 
CASE @locationType 
    WHEN 'location' THEN account_location
    WHEN 'area' THEN Area 
    WHEN 'division' THEN xxx_location_division 
END

或者你可以像这样做:

SELECT column1, column2 
FROM whatever 
WHERE 
   (@locationType = 'location' AND account_location LIKE @SearchTerm) 
OR 
   (@locationType = 'area' AND Area LIKE @SearchTerm) 
OR 
   (@locationType = 'division' AND xxx_location_division LIKE @SearchTerm)

我搜索的列基于 @searchtype。虽然没有在这里明确提到,但 @locationType 是在此处使用的变量。 - Deeptechtons
所以在这里,您可以将变量@locationType替换为searchType。 - Upendra Chaudhari

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接