{{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 ▷]]