T-SQL et la clause WHERE LIKE % Parameter%

J'essayais d'écrire une instruction qui utilise la clause WHERE LIKE '%text%', mais je ne reçois pas de résultats lorsque j'essaie d'utiliser un paramètre pour le texte. Par exemple, cela fonctionne:

SELECT Employee WHERE LastName LIKE '%ning%'

Cela renverrait les utilisateurs Flenning, Manning, Ningle, etc. Mais cette déclaration ne serait pas:

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

Aucun résultat trouvé. Toutes les suggestions? Merci à l'avance.

50
demandé sur Mahmoud Gamal 2013-01-09 18:45:03

3 réponses

Il devrait être:

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

Au Lieu de:

...
WHERE LastName LIKE '%@LastName%'
111
répondu Mahmoud Gamal 2018-10-01 21:03:05

La bonne réponse est que, parce que le signe '%' fait partie de votre expression de recherche, il devrait faire partie de votre valeur, donc partout où vous définissez @LastName (que ce soit à partir d'un langage de programmation ou de TSQL) vous devriez le définir à '%' + [userinput] + '%'

Ou, dans votre exemple:

DECLARE @LastName varchar(max)
SET @LastName = 'ning'
SELECT Employee WHERE LastName LIKE '%' + @LastName + '%'
14
répondu swe 2017-11-01 09:13:49

Vous pouvez essayer celui-ci, utilisé CONCAT

WHERE LastName LIKE Concat('%',@LastName,'%')
1
répondu Ramgy Borja 2017-07-31 07:19:40