Lavorare con i dati testuali è una parte quotidiana delle attività con i database. Immagina di essere uno sviluppatore di un e-commerce e di avere un database di utenti. Devi mostrare i nomi completi degli utenti per un banner di benvenuto sul sito, tipo: "Benvenuto, Otto Art!". Oppure ti serve standardizzare tutti gli indirizzi email (ad esempio, convertirli in minuscolo). In questi casi, le operazioni sulle stringhe sono indispensabili.
PostgreSQL ti dà strumenti potenti per lavorare con il testo. Oggi vediamo tre strumenti base:
CONCAT()— unisce le stringhe.UPPER()— trasforma una stringa in maiuscolo.LOWER()— trasforma una stringa in minuscolo.
Lavorare con la funzione CONCAT()
La funzione CONCAT() ti permette di unire più stringhe in una sola. È super utile se i dati sono in colonne diverse ma vuoi unirli per mostrarli.
Sintassi
CONCAT(string1, string2, ..., stringN)
string1,string2,stringN— le stringhe o colonne che vuoi unire.- Restituisce una stringa composta da tutti gli argomenti.
Esempio: lavoriamo con i nomi
Supponiamo di avere una tabella students:
| first_name | last_name |
|---|---|
| Otto | Art |
| Maria | Chi |
| Anna | Pal |
Il nostro obiettivo: mostrare i nomi completi degli studenti nel formato "Nome Cognome".
Query:
SELECT CONCAT(first_name, ' ', last_name) AS full_name
FROM students;
Risultato:
| full_name |
|---|
| Otto Art |
| Maria Chi |
| Anna Pal |
Nota il ' ' tra nome e cognome. È uno spazio che abbiamo aggiunto per separare le stringhe.
Cose da sapere
CONCAT() ignora NULL. Se uno degli argomenti è NULL, viene semplicemente saltato. Se ancora non sai cos'è NULL, tranquillo — ne parleremo più avanti.
Alternativa a CONCAT() — l'operatore ||, tipo:
SELECT first_name || ' ' || last_name AS full_name FROM students;
Cambiare il case delle stringhe: UPPER() e LOWER()
Immagina di lavorare con indirizzi email che gli utenti hanno inserito in tutti i modi possibili: ivan@example.com, IVAN@EXAMPLE.COM. Per standardizzare spesso serve:
- portare il testo a un unico formato prima di confrontarlo (tipo
lowercase). - evidenziare parole importanti (tipo
UPPERCASEper i titoli).
UPPER(): testo in maiuscolo
La funzione UPPER() trasforma il testo in lettere maiuscole.
Sintassi:
UPPER(string)
string— la stringa o il nome della colonna di testo.
Esempio:
Nella tabella students abbiamo aggiunto la colonna email:
| first_name | last_name | |
|---|---|---|
| Otto | Art | otto@example.com |
| Maria | Chi | MARIA@EXAMPLE.com |
| Anna | Pal | anna.pal@mail.ru |
Vogliamo mostrare gli indirizzi email in maiuscolo:
SELECT email, UPPER(email) AS email_upper
FROM students;
Risultato:
| email_upper | |
|---|---|
| otto@example.com | OTTO@EXAMPLE.COM |
| MARIA@EXAMPLE.com | MARIA@EXAMPLE.COM |
| anna.pal@mail.ru | ANNA.PAL@MAIL.RU |
LOWER(): testo in minuscolo
Allo stesso modo, la funzione LOWER() trasforma il testo in minuscolo.
Sintassi:
LOWER(string)
Esempio:
Portiamo gli indirizzi email in minuscolo:
SELECT email, LOWER(email) AS email_lower
FROM students;
Risultato:
| email_lower | |
|---|---|
| otto@example.com | otto@example.com |
| MARIA@EXAMPLE.com | maria@example.com |
| anna.pal@mail.ru | anna.pal@mail.ru |
Esempi pratici e casi reali
Dai, mettiamo insieme tutto quello che abbiamo visto.
Creare il nome completo in maiuscolo
Query:
SELECT CONCAT(UPPER(first_name), ' ', UPPER(last_name)) AS full_name_upper
FROM students;
Risultato:
| full_name_upper |
|---|
| OTTO ART |
| MARIA CHI |
| ANNA PAL |
Qui abbiamo usato la funzione CONCAT() per unire nome e cognome, e UPPER() per portarli in maiuscolo.
Esempio: standardizzare gli indirizzi email
Vogliamo portare tutti gli indirizzi email allo stesso formato — minuscolo:
UPDATE students
SET email = LOWER(email);
Ora tutti gli indirizzi email nella tabella sono uguali, indipendentemente dal case originale.
Come funziona l'operatore UPDATE lo vedrai nelle prossime lezioni.
Preparare un messaggio di benvenuto per gli utenti
Aggiungiamo ai nomi completi il messaggio "Benvenuto":
SELECT CONCAT('Benvenuto, ', first_name, ' ', last_name, '!') AS greeting
FROM students;
Risultato:
| greeting |
|---|
| Benvenuto, Otto Art! |
| Benvenuto, Maria Chi! |
| Benvenuto, Anna Pal! |
Errori tipici quando lavori con le funzioni sulle stringhe
Se ti dimentichi lo spazio in CONCAT(), il risultato può essere strano. Ad esempio:
SELECT CONCAT(first_name, last_name) AS full_name
FROM students;
Il risultato sarà: "OttoArt", "MariaChi". Ricordati sempre di aggiungere lo spazio dove serve.
Uso di NULL. Se uno degli argomenti di CONCAT() è NULL, la stringa può risultare incompleta. Ad esempio:
SELECT CONCAT(first_name, ' ', middle_name, ' ', last_name) AS full_name
FROM students;
Se middle_name = NULL, il risultato sarà "Otto NULL Art". Per evitarlo, puoi usare la funzione COALESCE():
SELECT CONCAT(first_name, ' ', COALESCE(middle_name, ''), ' ', last_name) AS full_name
FROM students;
Scoprirai di più su NULL e sulla funzione COALESCE() nelle prossime lezioni :P
GO TO FULL VERSION