T-SQL und die WHERE LIKE% Parameter% -Klausel

84

Ich habe versucht, eine Anweisung zu schreiben, die die WHERE LIKE-Klausel '% text%' verwendet, aber ich erhalte keine Ergebnisse, wenn ich versuche, einen Parameter für den Text zu verwenden. Zum Beispiel funktioniert dies:

SELECT Employee WHERE LastName LIKE '%ning%'

Dies würde Benutzer Flenning, Manning, Ningle usw. zurückgeben. Diese Aussage würde jedoch nicht:

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

Keine Ergebnisse gefunden. Irgendwelche Vorschläge? Danke im Voraus.

dp3
quelle

Antworten:

159

Es sollte sein:

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

Anstatt von:

...
WHERE LastName LIKE '%@LastName%'
Mahmoud Gamal
quelle
1
danke für den früheren tipp zur frage. Aber es war nicht so. Wie auch immer, auf der Suche nach einer leistungsstarken Antwort - ist das nützlich oder nicht? :)
BonCodigo
1
@bonCodigo Ich weiß es nicht wirklich, Leistung und Optimierung sind nicht mein Bereich. Darüber hinaus sind diese Funktionen herstellerspezifisch. In Ihrem Fall hängt dies davon ab, wie das Oracle RDBMS sie bewertet, und ich kenne Oracle nicht. Es tut uns leid.
Mahmoud Gamal
3
Das hat bei mir nicht funktioniert. Das% muss sich im Abschnitt addParameter befinden. Siehe James Curran Antwort hier stackoverflow.com/questions/251276/…
bendecko
2
siehe meine Antwort (derzeit unten). Das Platzhaltersymbol ist TEIL des SEARCH-Ausdrucks und nicht Teil der SQL-Abfrage. Sie wird vom BENUTZER eingegeben (oder, wenn die Platzhaltersuche vordefiniert ist, an die Eingabe des Suchausdrucks des Benutzers angehängt). Wenn Sie es über String-Konkatanation auf Datenbankebene anhängen, erhalten Sie eine nicht wiederverwendbare Abfrage-String
Swe
16

Die richtige Antwort lautet: Da das '%'-Zeichen Teil Ihres Suchausdrucks ist, sollte es Teil Ihres WERTES sein. Wo immer Sie @LastNamees einstellen (sei es aus einer Programmiersprache oder aus TSQL), sollten Sie es einstellen'%' + [userinput] + '%'

oder in Ihrem Beispiel:

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

Sie können dieses verwendete CONCAT ausprobieren

WHERE LastName LIKE Concat('%',@LastName,'%')
Ramgy Borja
quelle