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%'

Результатов не найдено. Какие-либо предложения? Заранее спасибо.

Ответы:


161

Должен быть:

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

Вместо:

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

1
спасибо за предыдущий совет по вопросу. Но это было не так. В любом случае, в поисках высокоэффективного ответа - полезно это или нет? :)
bonCodigo 09

1
@bonCodigo На самом деле не знаю, производительность и оптимизация - не моя область. Кроме того, эти функции зависят от поставщика, в вашем случае это зависит от того, как СУБД Oracle их оценивает, а я не знаю Oracle. Сожалею.
Махмуд Гамаль

3
У меня это не сработало. % Должен находиться в разделе addParameter. См. Ответ Джеймса Каррана здесь stackoverflow.com/questions/251276/…
bendecko

2
см. мой ответ (в настоящее время ниже). подстановочный знак является ЧАСТЬЮ выражения ПОИСК, а не частью sql-запроса. Он вводится ПОЛЬЗОВАТЕЛЕМ (или, если предопределен поиск по шаблону, добавляется к вводу выражения поиска пользователя). Если вы добавите его через конкатанацию строк на уровне базы данных, вы получите строку запроса, которую нельзя использовать повторно
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.