265 votes

Comment puis-je échapper aux crochets dans une clause LIKE ?

J'essaie de filtrer des éléments avec une procédure stockée en utilisant like. La colonne est un varchar(15). Les éléments que j'essaie de filtrer ont des crochets dans leur nom.

Par exemple : WC[R]S123456 .

Si je fais un LIKE 'WC[R]S123456' il ne retournera rien.

J'ai trouvé des informations sur l'utilisation du ESCAPE mot-clé avec LIKE mais je ne comprends pas comment l'utiliser pour traiter les crochets comme une chaîne régulière.

363voto

Otávio Décio Points 44200

http://sqlserver2000.databases.aspfaq.com/how-do-i-search-for-special-characters-e-g-in-sql-server.html

LIKE 'WC[[]R]S123456' 

ou

LIKE 'WC\[R]S123456' ESCAPE '\'

Ça devrait marcher.

10 votes

Le mot clé ESCAPE est nécessaire si vous souhaitez utiliser un caractère d'échappement personnalisé (la barre oblique inversée est en effet personnalisée).

2 votes

J'ai aussi corrigé l'autre partie de la réponse. Fidèle à SQL avec les versions avant et après

0 votes

Notez que si vous voulez trouver une parenthèse ouverte puis fermée, la méthode [[] []] ne fonctionne pas, vous devez utiliser la méthode ESCAPE '\'.

138voto

Amitesh Points 121

Permet de faire correspondre le littéral : its[brac]et .

Vous n'avez pas besoin d'échapper à la ] car il n'a de signification particulière que lorsqu'il est associé à [ .

Par conséquent, l'évasion [ suffit à résoudre le problème. Vous pouvez vous échapper [ avec en le remplaçant par [[] .

8 votes

C'était vraiment utile et, à mon avis, la meilleure réponse.

1 votes

[[] a l'air bizarre, mais il est logique quand on le regarde du point de vue de l'analyseur. L'analyseur syntaxique a une règle spécifique pour gérer les caractères entre [ ] . Donc, le texte its[brac]et signifie : "Trouvez les chaînes de caractères consécutives suivantes : its , (appliquer la règle pour les crochets : brac ), et " . D'autre part, its[[]brac]et signifie : "Trouvez les chaînes de caractères consécutives suivantes : its , (appliquer la règle pour les crochets : [ ), brac]et " .

29voto

Andrew Backer Points 3009

J'avais besoin d'exclure d'une requête les noms qui commençaient par un trait de soulignement, et j'ai donc obtenu ce résultat :

WHERE b.[name] not like '\_%' escape '\'  -- use \ as the escape character

2 votes

J'ai dû utiliser cette version (en spécifiant explicitement le caractère "escape") - les autres réponses ici n'ont pas donné les bons résultats pour moi.

21voto

Travis Points 409

Voici ce que j'ai utilisé en réalité :

like 'WC![R]S123456' ESCAPE '!'

16voto

scottm Points 13578

Le mot-clé ESCAPE est utilisé si vous devez rechercher des caractères spéciaux comme % et _, qui sont normalement des caractères de remplacement. Si vous spécifiez ESCAPE, SQL recherchera littéralement les caractères % et _.

Voici un bon article avec d'autres exemples.

SELECT columns FROM table WHERE 
    column LIKE '%[[]SQL Server Driver]%' 

-- or 

SELECT columns FROM table WHERE 
    column LIKE '%\[SQL Server Driver]%' ESCAPE '\'

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X