Passer au contenu principal
eLearner.app
Module 6 · Leçon 1 sur 421/57 dans le cours~12 min
Leçons du module (1/4)

Fonctions de chaînes

PostgreSQL possède des dizaines de fonctions pour manipuler les chaînes. Dans cette leçon nous examinons les plus courants dans le travail réel : la normalisation (LOWER/UPPER), mesurer (LENGTH), composer (|| / CONCAT), extraire (SUBSTRING), nettoyage (TRIM), substitution (REPLACE) et recherche de modèles (LIKE / ILIKE).

Les fonctions que nous utiliserons

SQL
LOWER('Alice')                -- 'alice'
UPPER('alice')                -- 'ALICE'
LENGTH('alice')               -- 5
'a' || 'b'                    -- 'ab'  (concatenazione)
CONCAT('a', 'b', 'c')         -- 'abc' (versione "funzione")
SUBSTRING('hello' FROM 2 FOR 3) -- 'ell'
TRIM(' alice ')               -- 'alice'
REPLACE('foo bar', 'bar','x') -- 'foo x'

|| est l'opérateur SQL standard pour concaténer des chaînes ; CONCAT est plus permissif (il ignore les NULL, alors que || les propage : 'a' || NULLNULL).

LIKE et ILIKE : recherche par modèle

LIKE recherche un modèle : % = n'importe quelle séquence, _ = un seul personnage. Il est sensible à la casse. ILIKE est le PostgreSQL Variante insensible à la casse :

SQL
WHERE name LIKE  '%Cuffie%'   -- match esatto "Cuffie"
WHERE name ILIKE '%cuffie%'   -- match anche "CUFFIE", "Cuffie", "cuffie"
WHERE email LIKE  '%@example.com'
WHERE first_name LIKE 'A_____'  -- inizia per A, lungo 6 (A + 5 caratteri)

Pour rechercher un littéral % ou _ à l'intérieur du modèle, utilisez ESCAPE :

SQL
WHERE titolo LIKE '%50\%%' ESCAPE '\';   -- contiene "50%"

Combinaison de fonctions

Les fonctions composent comme dans n'importe quel langage :

SQL
-- Email "normalizzata" e iniziali in maiuscolo:
SELECT LOWER(email) AS email_norm,
       UPPER(SUBSTRING(first_name FROM 1 FOR 1)) || '.'
       || UPPER(SUBSTRING(last_name  FROM 1 FOR 1)) || '.' AS iniziali
FROM   customers
ORDER BY id;

Essayez-le

Exercice#sql.m6.l1.e1
Tentatives : 0Chargement…

Pour chaque client, affichez l'e-mail en minuscules (colonne email) et le nom complet sous la forme « prénom nom_nom » (colonne nom_complet). Commande par identifiant.

Chargement de l'éditeur…
Afficher l'indice

INFÉRIEUR pour la première colonne, || pour concaténer avec un espace entre les deux.

Solution disponible après 3 tentatives

Exercice de révision

Exercice#sql.m6.l1.e2
Tentatives : 0Chargement…

Recherchez tous les produits dont le nom contient le mot « ordinateur portable » (dans tous les cas). Afficher uniquement la colonne de nom. Commandez par nom.

Chargement de l'éditeur…
Afficher l'indice

ILIKE n'est pas sensible à la casse. Utilisez « %laptop% » pour faire correspondre « laptop » dans n'importe quelle position.

Solution disponible après 3 tentatives