I. Introduction

L'opérateur logique LIKE est un opérateur d'égalité strictement réservé aux chaines de type texte. Sa particularité est de pouvoir comparer des valeurs à un masque composé de caractères de substitution.

Cet opérateur peut être utilisé avec SQL, VBA ou encore dans des expressions.

II. La syntaxe

La syntaxe est simple.

Syntaxe LIKE
Sélectionnez
Chaine_à_comparer LIKE "masque de comparaison"
Ou
Chaine_à_comparer LIKE 'masque de comparaison'

D'un côté nous avons la valeur à comparer et de l'autre le masque.

La syntaxe est identique en SQL, VBA ou dans les expressions.

La négation se fait grâce à NOT.

 
Sélectionnez
NOT (Chaine_à_comparer LIKE "masque de comparaison")

III. Les jokers

Les jokers sont des caractères de substitution permettant de composer le masque. Ils sont combinables. En voici la liste :

? * [! - ,]

III-A. L'astérisque

L'astérisque * remplace plusieurs caractères.

 
Sélectionnez
Chaine_à_comparer LIKE "*"
* Toute chaine
abc* Toute chaine commençant par abc
*abc Toute chaine finissant par abc
*abc* Toute chaine contenant abc

III-B. Le point d'interrogation

Le point d'interrogation ? remplace un seul caractère quel qu'il soit : lettre, chiffre, caractère spécial.

 
Sélectionnez
Chaine_à_comparer LIKE "???"
? Toute chaine contenant 1 caractère
abc? Toute chaine commençant par abc avec 1 caractère à la fin.
?abc Toute chaine commençant par 1 caractère et finissant par abc.
?abc? Toute chaine contenant abc avec 1 caractère de part et d'autre.
??? Toute chaine contenant 3 caractères.
*???* Toute chaine contenant 3 caractères contigus.


Comme le point d'interrogation remplace 1 caractère on peut en utiliser plusieurs à la suite dans un masque de comparaison.

III-C. Le dièse

Le caractère dièse # fonctionne comme le point d'interrogation mais remplace un chiffre, donc ni lettre, ni un caractère spécial.

 
Sélectionnez
Chaine_à_comparer LIKE "##.##"

III-D. Les crochets

Les crochets permettent de remplacer un caractère situé dans une plage particulière.

 
Sélectionnez
Chaine_à_comparer LIKE "[A-C,M,X-Z]10"
"[A -C]" Le tiret - détermine une plage de caractères contigus entre 2 bornes. Ici A, B ou C.
"[A,C,E]" La virgule, détermine une série de caractères. Ici A, C ou E.
"[A,M-O,Z]" La combinaison des 2. Ici A, M, N, O ou Z.
"[!A-C,1]" Exclut les caractères A, B, C et 1.
"[a-zA-Z0-9]" Permet de rechercher un caractère alphanumérique (lettre minuscule, majuscule ou chiffre, pas les caractères spéciaux.


Avec les chiffres on utilise la même syntaxe et les 2 sont combinables.

Attention les plages de caractères doivent toujours être placées dans l'ordre croissant. Par exemple [A-C] est valide alors que [C-A] ne l'est pas, de même que [0-9] est vailde et [9-0] ne l'est pas. Pour déterminer l'ordre des caractères, consultez la table ASCII et réalisez des tests.

III-D-1. Rechercher les caractères génériques

On peut être emmené à rechercher l'un des caractères génériques dans une chaîne. Quelques exemples dans le tableau suivant.

"*[?]" Le point d'interrogation à la fin d'une phrase.
"[*]*" Un astérisque au début d'une chaîne.
"[[]*[]]" Une chaîne bornée par des crochets comme "[formulaires]" par exemple.
"* [#]" Une chaîne finissant par le caractère #.
"*""*""*" Une chaîne bornée par de doublequote comme "Château "La vieille vigne" Médoc" par exemple.

III-E. Avec d'autres types de données

Le LIKE peut fonctionner avec d'autres types de données mais les valeurs testées seront transformées en texte par Jet pour leur évaluation.

Par exemple avec des dates on peut rechercher des séries.

LIKE Signification Équivalent sans LIKE
"##/##/2009" toutes les dates de 2009. Year(date)=2009
"##/1#/2009" les dates du 4e trimestre 2009. Format(Date,"t")=4 (*)
"10/##/####" Le 10 de chaque mois. Day(date)=10

On peut trouver certains intérêts à utiliser un LIKE plutôt qu'une expression plus académique, mais attention aux résultats qui peuvent être surprenants et loin de vos attentes.

(*) t en SQL, q en VBA. On peut également utiliser la fonction DatePart().

IV. SQL et VBA

On peut utiliser le LIKE en SQL mais également avec VBA ou dans des expressions dans ACCESS. Il s'utilise de la même manière que sous SQL.

Le résultat de l'expression renvoie une valeur booléenne (true, false, 0, -1).

Quelques tests dans la fenêtre d'exécution de VBE démontrent l'utilisation de l'opérateur LIKE.

avec VBA
Sélectionnez
variable="ceci#est [la preuve] par 9 ?" 
? variable LIKE "*[#]*[[]la preuve[]]*[0,9]?[?]"
Vrai

Avec SQL :

avec SQL
Sélectionnez
SELECT Id, Adresse FROM Table WHERE Adresse LIKE "* rue *";

V. Avec SQL Server

Le tableau ci-dessous donne la correspondance entre JET et SQL Server

JET SQL Server Signification
? _ 1 caractère
* % 1 chaîne de caractères
# aucun 1 caractère numérique
[] [] 1 liste de caractères
[!] [^] L'exclusion d'un ou plusieurs caractères.

VI. Conclusion

En conclusion voici un opérateur bien utile en toute circonstance surtout par sa disponibilité hors de SQL. Pour en savoir plus sur les opérateurs SQL je vous suggère la lecture de l'excellent tutoriel de Jeannot45 (à paraitre). Et si LIKE vous laisse sur votre faim utilisez le REGEX qui est expliqué au travers de l'incontournable tutoriel de Caféine http://cafeine.developpez.com/access/tutoriel/regexp/

Remerciements

Remerciements à ARKHAM46, JEANNOT45, JPCHECK et Claude Leloup pour ses corrections.