LIKE, caractères génériques et échappement
Correspondance de motifs, différence entre le pourcentage et le soulignement, et échappement des caractères génériques littéraux
LIKE, caractères génériques et échappement est une leçon Coding Interview Prep gratuite sur CoddyKit. Ceci est la leçon 3 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Coding Interview Prep, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Coding Interview Prep comprend 4 leçons au total.
La recherche par motif passée au crible en entretien
LIKE semble simple, mais dissimule trois pièges classiques d'entretien : confondre % et _, oublier qu'un signe pourcentage ou un soulignement littéral dans les données doit être échappé, et ignorer la surprise liée à la sensibilité à la casse, qui varie selon la base de données.
Cette leçon approfondit les deux caractères génériques, la clause ESCAPE et les règles propres aux différents dialectes, autant de points qu'un recruteur explorera pour distinguer les débutants des personnes ayant réellement livré des fonctionnalités de recherche.
Les deux caractères génériques
LIKE possède exactement deux caractères génériques :
%correspond à zéro caractère ou plus_correspond à exactement un caractère
Ainsi, 'a%' correspond à toute valeur commençant par a, tandis que 'a_' correspond à une chaîne de deux caractères commençant par a. Les confondre est l'erreur numéro un avec LIKE.
SELECT *
FROM customers
WHERE name LIKE 'A%';
-- every name beginning with ALe signe % à n'importe quelle position
Positionnez le % pour contrôler l'endroit où le motif doit correspondre :
'%son'se termine par son (Johnson, Mason)'%mary%'contient mary n'importe où'J%n'commence par J et se termine par n
Un '%' seul correspond à toutes les lignes non NULL. Les valeurs NULL ne correspondent jamais à un motif LIKE, y compris '%'.
SELECT *
FROM customers
WHERE email LIKE '%@gmail.com';Le soulignement pour une longueur fixe
_ correspond à un caractère quelconque, ce qui est utile pour les codes de longueur fixe. 'A__' correspond à exactement trois caractères commençant par A, ni plus ni moins.
Les recruteurs vérifient ce point avec des codes produit ou des codes de pays. Un candidat qui écrit 'A%' lorsqu'on lui demande un code de trois caractères commençant par A se trompe subtilement : il renvoie toute valeur commençant par A, quelle que soit sa suite.
SELECT *
FROM products
WHERE sku LIKE 'A__';
-- A followed by exactly two more charactersLorsque % et _ apparaissent dans les données
Que faire si vous devez trouver des valeurs contenant littéralement un signe pourcentage, comme l'étiquette de remise « 50 % de réduction » ? Écrire LIKE '%50%%' échoue, car le % final est traité comme un caractère générique et non comme un caractère littéral.
Vous devez indiquer au langage SQL qu'un caractère précis doit être interprété littéralement. C'est précisément le rôle de la clause ESCAPE.
La clause ESCAPE
Déclarez un caractère d'échappement avec ESCAPE, puis placez-le devant chaque caractère générique que vous voulez traiter littéralement. Ici, ! est le caractère d'échappement : !% signifie donc un signe pourcentage littéral.
Cela permet de trouver les valeurs contenant le texte littéral 50 % à n'importe quel endroit. Le caractère d'échappement est arbitraire ; choisissez-en un qui n'apparaît pas dans votre texte de recherche.
SELECT *
FROM promos
WHERE label LIKE '%50!%%' ESCAPE '!';
-- matches a literal '50%' anywhere in labelÉchapper un soulignement littéral
Les soulignements se cachent dans les noms d'utilisateur et les identifiants, et un _ non échappé correspond silencieusement à n'importe quel caractère. Pour trouver des adresses e-mail qui commencent littéralement par 'a_b', vous devez échapper le soulignement.
Sans cet échappement, 'a_b%' correspondrait aussi à 'axb', 'a9b', et ainsi de suite. Ce bogue arrive constamment en production, car la requête non échappée renvoie tout de même des lignes qui semblent plausibles.
SELECT *
FROM users
WHERE handle LIKE 'a!_b%' ESCAPE '!';
-- handle starting with the literal text a_bLa sensibilité à la casse varie selon la base de données
La sensibilité à la casse de LIKE dépend du moteur et de la collation :
- PostgreSQL :
LIKEest sensible à la casse ; utilisezILIKEpour ignorer la casse - MySQL : cela dépend de la collation de la colonne, qui est souvent insensible à la casse par défaut
- SQL Server : cela dépend du paramètre de collation
L'approche portable et explicite consiste à convertir les deux côtés en minuscules.
SELECT *
FROM customers
WHERE LOWER(name) LIKE 'a%';Le coût caché en performances
Un caractère générique initial comme '%son' ne peut pas utiliser un index en arbre B classique, car l'index est ordonné par préfixe et le début n'est pas fixé. Le moteur doit parcourir chaque ligne.
'son%' (caractère générique final, préfixe fixé au début) peut utiliser un index. Les recruteurs aiment demander pourquoi une recherche avec LIKE est lente ; le % initial est généralement la réponse.
-- index-friendly (anchored prefix):
WHERE name LIKE 'Smi%'
-- forces a scan (leading wildcard):
WHERE name LIKE '%mith'Au-delà de LIKE
Lorsque LIKE ne suffit plus, mentionnez les solutions de remplacement pour montrer l'étendue de vos connaissances :
SIMILAR TOet les expressions régulières POSIX (~,~*) dans PostgreSQL pour de véritables expressions régulières- Des index de recherche en texte intégral pour les grands corpus de texte libre
- Des index de trigrammes (pg_trgm) pour accélérer les recherches avec un caractère générique initial
Les citer montre que vous savez que LIKE constitue le niveau minimal, et non la limite supérieure, de la recherche textuelle.
Construire des motifs LIKE à partir d’une saisie utilisateur en toute sécurité
Les recruteurs demandent souvent : comment rechercher un terme saisi par un utilisateur avec LIKE sans provoquer de problème ? Deux risques sont à signaler :
- Injection — transmettez la valeur comme paramètre ; n’intégrez jamais une saisie brute par concaténation dans la chaîne SQL.
- Caractères génériques non échappés — si la saisie contient elle-même
%ou_, échappez-les afin qu’ils correspondent littéralement.
Paramétrez la valeur, puis ajoutez vos propres caractères génériques dans la requête.
-- $1 is bound as a parameter; wildcards are added in SQL
SELECT *
FROM products
WHERE name LIKE '%' || replace(replace($1, '_', '\_'), '%', '\%') || '%' ESCAPE '\';Vérification rapide
Rappelez-vous la différence entre les deux caractères génériques.
Récapitulatif
Points essentiels :
%correspond à zéro caractère ou plus ;_correspond à exactement un caractère- Pour rechercher un
%ou un_littéral dans les données, déclarez un caractèreESCAPEet placez-le devant le caractère générique - La sensibilité à la casse varie selon le moteur ; appliquer
LOWER()aux deux côtés est la solution portable (PostgreSQL proposeILIKE) - Un caractère générique initial impose un parcours complet ; un préfixe fixé au début peut utiliser un index
Un _ non échappé est un bogue silencieux : il renvoie tout de même des lignes plausibles.
Questions Fréquemment Posées
La leçon « LIKE, caractères génériques et échappement » est-elle gratuite ?
Oui — le texte complet de « LIKE, caractères génériques et échappement » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Coding Interview Prep, passe à CoddyKit PRO. Le cours Coding Interview Prep comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « LIKE, caractères génériques et échappement » ?
Correspondance de motifs, différence entre le pourcentage et le soulignement, et échappement des caractères génériques littéraux Tu pratiques Coding Interview Prep avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer Coding Interview Prep ?
Aucune expérience préalable n'est requise. Coding Interview Prep sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 3 sur 4.
Combien de temps prend la leçon « LIKE, caractères génériques et échappement » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon Coding Interview Prep ?
Oui. Chaque leçon Coding Interview Prep inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Priorité de AND et OR et usage des parenthèses
- BETWEEN, IN et limites inclusives
- LIKE, caractères génériques et échappement
- Filtrer sur des valeurs calculées