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.
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.
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.
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.
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.
Chaine_à_comparer LIKE
"##.##"
III-D. Les crochets▲
Les crochets permettent de remplacer un caractère situé dans une plage particulière.
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.
variable=
"ceci#est [la preuve] par 9 ?"
? variable LIKE "*[#]*[[]la preuve[]]*[0,9]?[?]"
Vrai
Avec SQL :
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 https://cafeine.developpez.com/access/tutoriel/regexp/
Remerciements▲
Remerciements à ARKHAM46, JEANNOT45, JPCHECK et Claude Leloup pour ses corrections.