Vai al contenuto
eLearner.app
Modulo 6 · Lezione 1 di 421/57 nel corso~12 min
Lezioni del modulo (1/4)

Funzioni sulle stringhe

PostgreSQL ha decine di funzioni per manipolare stringhe. In questa lezione vediamo quelle più comuni nel lavoro reale: normalizzare (LOWER/UPPER), misurare (LENGTH), comporre (|| / CONCAT), estrarre (SUBSTRING), ripulire (TRIM), sostituire (REPLACE), e cercare per pattern (LIKE / ILIKE).

Le funzioni che useremo

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'

|| è l'operatore standard SQL per concatenare stringhe; CONCAT è più permissivo (ignora i NULL, mentre || propaga: 'a' || NULLNULL).

LIKE e ILIKE: cercare per pattern

LIKE cerca un pattern: % = qualunque sequenza, _ = un singolo carattere. È case-sensitive. ILIKE è la variante PostgreSQL case-insensitive:

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)

Per cercare un % o _ letterale dentro il pattern usa ESCAPE:

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

Combinare le funzioni

Le funzioni si compongono come in qualunque linguaggio:

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;

Prova tu

Esercizio#sql.m6.l1.e1
Tentativi: 0Caricamento…

Per ogni cliente mostra email in minuscolo (colonna email) e nome completo come 'first_name last_name' (colonna full_name). Ordina per id.

Caricamento editor…
Mostra suggerimento

LOWER per il primo, || per concatenare con uno spazio nel mezzo.

Soluzione disponibile dopo 3 tentativi

Esercizio di ripasso

Esercizio#sql.m6.l1.e2
Tentativi: 0Caricamento…

Trova tutti i prodotti che contengono la parola 'laptop' (in qualunque maiuscolo/minuscolo) nel nome. Mostra solo la colonna name. Ordina per name.

Caricamento editor…
Mostra suggerimento

ILIKE è case-insensitive. Usa '%laptop%' per matchare 'laptop' in qualsiasi posizione.

Soluzione disponibile dopo 3 tentativi