Retrouver un nom incomplet, repérer un code produit ou filtrer des références qui partagent un motif : l’opérateur SQL LIKE rend ces recherches possibles sans exiger une correspondance exacte. Ses jokers sont simples, mais leur emplacement influence autant la précision que la vitesse. Avec quelques règles concrètes, vos filtres deviennent plus souples sans transformer chaque requête en embouteillage.
L’article en bref
SQL LIKE permet de rechercher des fragments de texte et des formats précis grâce à quelques caractères génériques. Découvrez comment combiner les motifs, traiter les caractères spéciaux et préserver les performances de vos requêtes.
- Jokers bien choisis : Utilisez % pour plusieurs caractères et _ pour un seul caractère.
- Recherche multi-valeurs : Combinez plusieurs motifs avec OR ou des crochets adaptés.
- Caractères maîtrisés : Protégez les symboles littéraux avec ESCAPE et les crochets.
- Requêtes plus rapides : Préférez un préfixe fixe pour favoriser l’usage des index.
Quelques bons réflexes suffisent pour gagner en précision sans ralentir vos recherches.
SQL LIKE : filtrer des textes sans correspondance exacte
Dans une clause WHERE, SQL LIKE compare le contenu d’une colonne à un motif de recherche. Contrairement au signe égal, il peut retrouver une valeur même si seul un fragment est connu : pratique pour repérer les clients dont le nom commence par « Mar », par exemple.
Imaginez une boutique qui cherche des références contenant « lampe » dans un catalogue aux intitulés parfois imprévisibles. Le signe égal exige le texte complet, tandis que LIKE permet d’exprimer une règle souple, sans deviner chaque intitulé au caractère près.
Une recherche de préfixe s’écrit ainsi : WHERE nom LIKE ‘Mar%’. Le résultat inclut les valeurs qui commencent par « Mar », suivies de zéro, un ou plusieurs caractères. Pour retrouver une expression n’importe où dans un champ, le motif devient ‘%lampe%’.
Caractères génériques SQL : comprendre le joker % et le joker _
Les deux caractères génériques les plus courants n’ont pas le même rôle. Le joker % accepte une suite de longueur variable, y compris une suite vide ; le joker _ représente exactement un caractère. Ce détail change la forme des résultats.
- ‘Dan%’ repère les chaînes qui commencent par « Dan », comme Daniel ou Danielle.
- ‘%son’ repère les valeurs qui se terminent par « son ».
- ‘_ean’ trouve les chaînes de quatre caractères terminant par « ean », comme Sean.
- ‘7500_’ cible les chaînes de cinq caractères commençant par « 7500 ».
Les motifs peuvent aussi combiner les deux jokers. Par exemple, ‘ERR_%.log’ cherche des valeurs où « ERR » est suivi d’un caractère, puis d’une séquence quelconque avant « .log ». Un format strict exige toutefois de vérifier les données réelles : un underscore impose bien une position, mais ne garantit pas à lui seul que le reste de la chaîne soit absent.
Retenez l’image du filet : % laisse passer des séquences de tailles variées, tandis que _ réserve une seule maille précise.
Ces motifs servent aussi à la recherche multi-valeurs, mais une liste de possibilités ne se formule pas toujours de la même manière. Le choix dépend du moteur SQL et du nombre de variantes recherchées.
Rechercher plusieurs valeurs avec SQL LIKE et l’opérateur OR
Pour tester plusieurs motifs indépendants, vous pouvez relier les conditions avec l’opérateur OR. Une recherche de noms commençant par « Mar » ou « Lou » s’exprime ainsi : WHERE nom LIKE ‘Mar%’ OR nom LIKE ‘Lou%’. Chaque motif reste lisible et facile à modifier.
Sur SQL Server, les crochets permettent de définir plusieurs caractères possibles à une position donnée. Le motif ‘ [ML]ar%’ — sans espace initial dans la requête — revient à chercher une valeur débutant par M ou L, puis par « ar ». Pour désigner une plage, une forme comme ‘[A-D]%’ sélectionne les valeurs commençant par une lettre comprise entre A et D.
Les crochets sont une fonctionnalité de SQL Server, et non une syntaxe portable à tous les systèmes de bases de données. Pour plusieurs mots ou préfixes complets, les conditions LIKE reliées par OR sont généralement plus explicites ; les motifs entre crochets conviennent surtout à des variantes d’un caractère.
Protéger les caractères spéciaux avec ESCAPE et NOT LIKE
Dans un motif LIKE, le pourcentage et le tiret bas ont une fonction spéciale. Pour rechercher un symbole % présent littéralement dans une colonne — par exemple dans une remise affichée comme « 20% » — il faut indiquer au moteur de ne pas l’interpréter comme un joker.
SQL Server accepte la clause ESCAPE pour définir un caractère d’échappement. Avec le point d’exclamation choisi comme repère, le motif ‘%!%%’ ESCAPE ‘!’ recherche les textes contenant un signe % réel : le premier et le dernier pourcentages servent de jokers, tandis que ‘!%’ désigne le caractère littéral.
Les crochets peuvent également servir à traiter certains caractères réservés dans SQL Server. Pour cibler un crochet ouvrant littéral, le motif ‘[[]’ est une forme couramment utilisée. Comme ces conventions dépendent du moteur, il vaut mieux vérifier la syntaxe de la base concernée avant de déplacer une requête.
NOT LIKE inverse le filtre et écarte les valeurs correspondant au modèle. Attention aux valeurs NULL : elles ne sont ni égales ni différentes d’un motif au sens logique SQL, et n’apparaissent donc pas avec NOT LIKE sans condition complémentaire telle que « colonne IS NULL ».
Quand les motifs sont justes, le prochain enjeu est de garder une recherche réactive, surtout sur une table qui contient beaucoup de lignes.
Optimisation des requêtes SQL LIKE : préserver les performances
Un motif qui commence par une chaîne fixe, comme ‘ABC%’, peut permettre à SQL Server d’exploiter un index pour cibler les valeurs commençant par ABC. À l’inverse, ‘%ABC’ ou ‘%ABC%’ ne donne pas de point de départ au moteur : il doit souvent examiner une grande partie des lignes.
La règle pratique est simple : si le besoin le permet, placez le joker à droite du texte connu. Une recherche d’email par domaine peut ainsi utiliser un préfixe fixe si les données sont organisées pour le permettre ; chercher un fragment arbitraire au milieu d’une adresse sera généralement plus coûteux.
| Besoin | Exemple de motif | Effet habituel |
|---|---|---|
| Commencer par une valeur | ‘ABC%’ | Index potentiellement exploitable |
| Finir par une valeur | ‘%ABC’ | Parcours souvent plus étendu |
| Contenir un fragment | ‘%ABC%’ | Recherche généralement coûteuse |
| Correspondance exacte | ‘ABC’ | Préférer = si le besoin est strict |
Les performances dépendent aussi du type de colonne, de l’indexation, de la collation et du volume de données. Évitez d’appliquer systématiquement une fonction à la colonne filtrée, comme RTRIM, car cette transformation peut empêcher l’utilisation directe d’un index ; mieux vaut traiter les espaces à la source lorsque c’est possible.
PATINDEX peut repérer la position d’un motif, mais ce n’est pas un raccourci universel vers une recherche plus rapide : il ne remplace pas LIKE pour tous les filtres et ne garantit pas une recherche indexée. Les expressions régulières, elles, ne sont pas prises en charge par LIKE ; elles nécessitent des fonctions ou extensions propres au moteur utilisé.
Collation et types de texte : éviter les résultats surprenants
La collation détermine notamment si les comparaisons distinguent les majuscules des minuscules. Avec une collation insensible à la casse, « A » et « a » peuvent correspondre au même motif ; une collation sensible à la casse les traite différemment. Dans SQL Server, COLLATE permet de préciser le classement utilisé pour une comparaison, à condition de choisir une collation compatible avec la base.
Le type de colonne compte également. CHAR réserve une longueur fixe et peut être complété par des espaces, tandis que VARCHAR stocke une longueur variable. En cas de résultats inattendus, vérifiez les espaces de fin, les conversions implicites et la collation avant d’ajouter des fonctions de nettoyage au filtre.
Avant de déployer une requête, testez quelques valeurs représentatives : casse différente, espace final, caractère spécial et chaîne vide. Ce petit contrôle évite qu’un filtre apparemment correct ne fasse disparaître des données utiles.
Les réflexes à garder pour vos motifs SQL LIKE
- Choisissez = lorsqu’une correspondance exacte suffit.
- Utilisez % pour une suite variable et _ pour un caractère unique.
- Reliez les motifs complets avec OR pour une recherche multi-valeurs lisible.
- Réservez les crochets et ESCAPE aux syntaxes compatibles avec votre moteur.
- Privilégiez un préfixe fixe et vérifiez le plan d’exécution sur les grandes tables.
Questions fréquentes sur la syntaxe SQL LIKE
Comment rechercher plusieurs valeurs avec SQL LIKE ?
Reliez plusieurs conditions LIKE avec OR, par exemple nom LIKE ‘Mar%’ OR nom LIKE ‘Lou%’. Dans SQL Server, les crochets peuvent aussi représenter plusieurs caractères possibles à une position précise.
Quelle différence entre le joker % et le joker _ ?
Le pourcentage remplace une séquence de zéro à plusieurs caractères. Le tiret bas remplace exactement un caractère. Le choix dépend donc de la longueur variable ou fixe du motif recherché.
Pourquoi une requête LIKE avec % au début est-elle souvent lente ?
Un motif comme ‘%texte’ ne fournit pas de préfixe fixe à l’index. SQL Server doit souvent examiner de nombreuses lignes. Un motif comme ‘texte%’ peut, selon l’index et le plan d’exécution, être plus efficace.
SQL LIKE distingue-t-il les majuscules des minuscules ?
Cela dépend principalement de la collation de la colonne ou de la base. Une collation insensible à la casse rapproche majuscules et minuscules ; COLLATE peut préciser le comportement pour une comparaison.
Comment rechercher un signe % réellement présent dans le texte ?
Dans SQL Server, définissez un caractère d’échappement avec ESCAPE, puis placez-le devant le signe % littéral. Les crochets permettent aussi de traiter certains caractères réservés selon la syntaxe du moteur.




