2013-01-09 13 views
42

Próbowałem napisać oświadczenie, które używa klauzuli WHERE LIKE "% text%", ale nie otrzymuję wyników, gdy próbuję użyć parametru dla tekstu. Na przykład, to działa:T-SQL i WHERE LIKE% Parametr% klauzula

SELECT Employee WHERE LastName LIKE '%ning%' 

byłby to powrót użytkownicy Flenning, Manning, Ningle, itd. Ale to stwierdzenie nie byłoby:

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

Brak wyników. Jakieś sugestie? Z góry dziękuję.

Odpowiedz

93

Powinno być:

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

Zamiast:

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

albo to:

... 
WHERE LastName LIKE Concat('%',@LastName,'%') 
+1

dzięki dla wcześniejszej wskazówki na pytanie. Ale tak nie było. W każdym razie [w poszukiwaniu wysokiej skuteczności odpowiedź jest przydatna czy nie?] (Http://stackoverflow.com/a/14243580/1389394) :) – bonCodigo

+1

@bonCodigo Nie wiem tak naprawdę, wydajność i optymalizacja nie jest mój obszar. Co więcej, te funkcje są specyficzne dla dostawcy, w twoim przypadku zależy to od tego, w jaki sposób Oracle RDBMS je ocenia, i nie znam Oracle. Przepraszam. –

+2

To nie działa dla mnie. % Musi znajdować się w sekcji addParameter. Zobacz odpowiedź Jamesa Currana na http://stackoverflow.com/questions/251276/howto-parameters-and-like-statement-sql – bendecko

14

Poprawną odpowiedzią jest, że ponieważ '%' -znak jest częścią Twoje wyrażenie w wyszukiwaniu powinno być częścią Twojej WARTOŚCI, więc jeśli ustawisz @LastName (czy to z języka programowania lub z TSQL) należy ustawić go na '%' + [userinput] + '%'

lub, w przykładzie:

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

Dziękuję Dziękuję! –

1

można próbować ten jeden, stosowany CONCAT

WHERE LastName LIKE Concat('%',@LastName,'%') 
Powiązane problemy