T-SQL та речення WHERE LIKE% Parameter%


84

Я намагався написати заяву, яка використовує речення WHERE LIKE '% text%', але я не отримую результатів, коли намагаюся використовувати параметр для тексту. Наприклад, це працює:

SELECT Employee WHERE LastName LIKE '%ning%'

Це поверне користувачів Flenning, Manning, Ningle тощо. Але це твердження не буде:

DECLARE @LastName varchar(max)
SET @LastName = 'ning'
SELECT Employee WHERE LastName LIKE '%@LastName%'

Нічого не знайдено. Будь-які пропозиції? Заздалегідь спасибі.

Відповіді:


159

Вона повинна бути:

...
WHERE LastName LIKE '%' + @LastName + '%';

Замість:

...
WHERE LastName LIKE '%@LastName%'

1
дякую за попередню пораду з цього питання. Але це було не так. У будь-якому випадку у пошуках високоефективної відповіді - корисно це чи ні? :)
bonCodigo

1
@bonCodigo Я насправді не знаю, продуктивність та оптимізація - це не моя сфера. Крім того, ці функції специфічні для постачальника, у вашому випадку це залежить від того, як Oracle RDBMS оцінює їх, і я не знаю Oracle. Вибачте.
Махмуд Гамаль

3
Це не спрацювало для мене. % Повинен знаходитись у розділі addParameter. Див Джеймс Каррен відповідь тут stackoverflow.com/questions/251276 / ...
bendecko

2
див. мою відповідь (на даний момент нижче). символ підстановки - ЧАСТИНА виразу ПОШУК, а не частина запиту sql. Він вводиться КОРИСТУВАЧОМ (або, якщо пошук за замовчуванням визначений заздалегідь, додається до введення виразу пошуку користувачів). Якщо додати його з допомогою рядка concatanation на рівні бази даних, ви отримаєте unreusable рядки запиту
SWE

16

Правильна відповідь полягає в тому, що, оскільки '%'-sign є частиною вашого пошукового виразу, він повинен бути частиною вашої VALUE, тому, де @LastNameб ви не встановили (будь то з мови програмування або з TSQL), ви повинні встановити для нього значення'%' + [userinput] + '%'

або, у вашому прикладі:

DECLARE @LastName varchar(max)
SET @LastName = 'ning'
SELECT Employee WHERE LastName LIKE '%' + @LastName + '%'

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.