SQL Case и LIKE в предложении where - PullRequest
4 голосов
/ 28 ноября 2011

Я ломал голову над этой надеждой, что это возможно

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 голосов
/ 28 ноября 2011
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 operator .

--- Обновление ----

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
0 голосов
/ 28 ноября 2011

Если вам не нужно проверять промежуточную строку, вы можете сделать трюк, как показано ниже:

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)
...