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
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' || NULL → NULL).
LIKE e ILIKE: cercare per pattern
LIKE cerca un pattern: % = qualunque sequenza, _ = un singolo
carattere. È case-sensitive. ILIKE è la variante PostgreSQL
case-insensitive:
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:
WHERE titolo LIKE '%50\%%' ESCAPE '\'; -- contiene "50%"Combinare le funzioni
Le funzioni si compongono come in qualunque linguaggio:
-- 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
Per ogni cliente mostra email in minuscolo (colonna email) e nome completo come 'first_name last_name' (colonna full_name). Ordina per id.
Mostra suggerimento
LOWER per il primo, || per concatenare con uno spazio nel mezzo.
Soluzione disponibile dopo 3 tentativi
Esercizio di ripasso
Trova tutti i prodotti che contengono la parola 'laptop' (in qualunque maiuscolo/minuscolo) nel nome. Mostra solo la colonna name. Ordina per name.
Mostra suggerimento
ILIKE è case-insensitive. Usa '%laptop%' per matchare 'laptop' in qualsiasi posizione.
Soluzione disponibile dopo 3 tentativi