Outils pour utilisateurs

Outils du site


cours:informatique:dev:db:postgres:fondamentaux_postgresql:245_like

PostgreSQL LIKE

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 :

  • 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.

◁ Précédent | ⌂ Retour au sommaire | Suivant ▷

cours/informatique/dev/db/postgres/fondamentaux_postgresql/245_like.txt · Dernière modification : 2025/04/09 21:11 de yoann