{{tag>tutotriel sql postgresql db database}}
====== PostgreSQL LIKE ======
Notes et traduction du tutoriel [[https://neon.tech/postgresql/tutorial|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 :
* le caractère pourcent ''%'' correspond à une séquence de caractères quelconques ;
* Le caractère blanc souligné ''_'' 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 =====
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;
===== Échappement des méta-caractères =====
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.
===== Résumé =====
* Utiliser l'opérateur LIKE pour trouver des correspondance avec un motif ;
* Utiliser l'opérateur NOT LIKE pour inverser la correspondance ;
* Utiliser le caractère générique ''%'' pour désigner 0 ou plusieurs caractères quelconques ;
* Utiliser le caractère générique ''_'' pour désigner un caractère quelconque ;
* Utiliser l'option ''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 ;
* Utiliser ILIKE pour produire des motifs non sensibles à la chasse de caractère.
[[240_between|◁ Précédent]] |
[[000_start|⌂ Retour au sommaire]] |
[[250_is_null|Suivant ▷]]