Notes et traduction du tutoriel PostgreSQL Tutorial
On utilise l'opérateur LIKE
avec un motif pour retrouver une valeur pas totalement connue :
-- Retrouver les enregistrement dont le prénom commence par "Jen" SELECT first_name, last_name FROM customer WHERE first_name LIKE 'Jen%';
La clause WHERE
de la requête contient une expression composée de la la valeur de first_name
, de l'opérateur LIKE
et d'une chaîne littérale contenant un symbole “%”. La chaine 'Jen%' est appelée motif (pattern).
La requête retourne les enregistrements pour lesquels la valeur de first_name
commence par la chaine “Jen” suivie de n'importe quel caractère. Cette technique est désigner correspondance au motif (patterm matching).
On construit un motif en combinant des valeurs littérales avec des caractères génériques et en utilisant l'opérateur LIKE
ou NOT LIKE
.
PosgreSQL propose deux metacaractères génériques :
%
correspond à une séquence de caractères quelconques ;_
correspond à un seul caractère quelconque.La syntaxe élémentaire de LIKE est donc :
VALUE LIKE pattern
L'opérateur LIKE
retourne vrai si la valeur correspond au motif. On peut utiliser l'opérateur NOT LIKE
pour inverser la correspondance.
-- Sélectionne les clients dont le prénom contiennent "er" SELECT first_name, last_name FROM customer WHERE first_name LIKE '%er%' ORDER BY first_name; -- Sélectionner les clients dont le prénom ne commence pas par "Jen" SELECT first_name, last_name FROM customer WHERE first_name NOT LIKE 'Jen%' ORDER BY first_name;
L'opérateur ILIKE est insensible à la chasse de caractères :
SELECT first_name, last_name FROM customer WHERE first_name ILIKE 'BAR%';
Dans cet exemple le motif BAR%
pourra correspondre à toute chaîne commençant par “BAR”,“Bar”, “BaR”,“bAr” etc. Ce que ne fera pas l'opérateur LIKE
.
PostgreSQL fournit également des opérateurs qui reproduisent les fonctionnalités de LIKE / ILIKE :
Opérateur | Equivalent |
---|---|
~~ | LIKE |
~~* | ILIKE |
!~~ | NOT LIKE |
!~~* | NOT ILIKE |
SELECT first_name, last_name FROM customer WHERE first_name ~~ 'Dar%' ORDER BY first_name;
Parfois les données peuvent contenir les méta-caractères utilisés par LIKE pour décrire le motif %
ou _
. Pour informer l'opérateur LIKE / ILIKE que certains caractères ne doivent pas être interprétés, il faut introduire un caractère d'échappement :
-- syntaxe string LIKE pattern ESCAPE escape_character; -- exemple message LIKE '%10$%%' ESCAPE '$';
Dans l'exemple ci-dessus le motif décrit toute chaîne contenant les caractères “10%”.
Dans ce motif :
'%10$%%'
Le premier et le dernier %
est interprété comme caractère générique alors que le %
placé après le caractère d'échappement $
est un caractère régulier.
%
pour désigner 0 ou plusieurs caractères quelconques ;_
pour désigner un caractère quelconque ;ESCAPE
et spécifier un caractère d'échappement si le motif doit inclure un caractère générique à ne pas interpréter comme tel ;