Uno degli scenari più popolari quando si lavora con i database è la preparazione dei dati per i report. Immagina questa situazione: lavori in un'università e il tuo capo (che ovviamente non capisce nulla di SQL) ti chiede di creare una lista di studenti unendo nome e cognome, e di mostrare anche la data di nascita nel formato DD-MM-YYYY. Il compito è chiaro: bisogna rendere i dati belli e ordinati. E SQL è il nostro fedele aiutante in questo.
Esempio 1: Unione di nome e cognome
Iniziamo unendo il nome (first_name) e il cognome (last_name) degli studenti dalla nostra tabella students.
SELECT
CONCAT(first_name, ' ', last_name) AS full_name
FROM
students;
Cosa succede qui?
CONCAT()unisce le stringhe. Aggiungiamo uno spazio tra nome e cognome per chiarezza.- Il risultato viene salvato in una nuova colonna
full_name.
Il risultato potrebbe essere così:
| full_name |
|---|
| Otto Art |
| Anna Song |
| Pol Mac |
Esempio 2: Formattazione della data
Ora aggiungiamo al nostro query la formattazione della data di nascita.
SELECT
CONCAT(first_name, ' ', last_name) AS full_name,
TO_CHAR(birth_date, 'DD-MM-YYYY') AS formatted_birth_date
FROM
students;
Cosa c'è di nuovo qui:
- Applichiamo la funzione
TO_CHAR()al campobirth_date. - Il formato
'DD-MM-YYYY'trasforma la data in una forma comoda (per esempio:25-12-2001).
Risultato:
| full_name | formatted_birth_date |
|---|---|
| Otto Art | 12-04-1995 |
| Anna Song | 03-08-1996 |
| Pol Mac | 21-11-1997 |
Voilà! Hai appena creato un report bello e ordinato.
Formattazione per esportazione dei dati
Supponiamo che uno dei tuoi colleghi voglia esportare i dati degli ordini in un file CSV per lavorarci poi in Excel. Ma i dati nel database sono salvati in un formato scomodo per lui, e la gente del reparto vendite vuole un formato specifico. Per esempio, invece del campo total_price, dove c'è il prezzo dell'ordine, vogliono vederlo così: $100.00.
Esempio 3: Conversione dei numeri in formato valuta
Formattiamo i dati degli ordini dalla tabella orders per l'esportazione:
SELECT
order_id,
TO_CHAR(total_price, 'FM$999,999.00') AS formatted_price
FROM
orders;
Cosa fa TO_CHAR() in questo caso?
FM(Fill Mode) toglie gli spazi inutili.$aggiunge il simbolo della valuta.999,999.00imposta il formato con separatori delle migliaia e due cifre decimali.
Risultato:
| order_id | formatted_price |
|---|---|
| 1 | $1,000.00 |
| 2 | $2,500.50 |
| 3 | $10.00 |
Ora il tuo collega può importare facilmente i dati in Excel e farti i complimenti alla riunione.
Compito finale
Ed ecco che arriva il bello. Mettiamo insieme tutte le skill che hai già imparato.
Compito
Crea una query per la tabella students che:
- Unisce nome e cognome in una sola colonna
full_name. - Converte la data di nascita nel formato
DD-MM-YYYY. - Mostra l'età dello studente alla data di oggi.
La query sarà più o meno così:
SELECT
CONCAT(first_name, ' ', last_name) AS full_name,
TO_CHAR(birth_date, 'DD-MM-YYYY') AS formatted_birth_date,
DATE_PART('year', AGE(birth_date)) AS age
FROM
students;
Elementi nuovi:
AGE(birth_date)restituisce l'intervallo tra la data attuale e la data di nascita, ma nel formato anni, mesi e giorni.DATE_PART('year', AGE(birth_date))estrae da quell'intervallo solo il numero di anni.
Risultato:
| full_name | formatted_birth_date | age |
|---|---|---|
| Otto Art | 12-04-1995 | 28 |
| Anna Song | 03-08-1996 | 27 |
| Pol Mac | 21-11-1997 | 25 |
Un report così farà contenti anche i colleghi più pignoli.
Formattazione per condizioni specifiche
A volte la formattazione dei dati serve per creare condizioni o filtri. Per esempio, prendiamo gli studenti che hanno il compleanno nel mese corrente.
Esempio 4: Filtro per mese
SELECT
CONCAT(first_name, ' ', last_name) AS full_name,
TO_CHAR(birth_date, 'DD-MM-YYYY') AS formatted_birth_date
FROM
students
WHERE
DATE_PART('month', birth_date) = DATE_PART('month', CURRENT_DATE);
Come funziona?
DATE_PART('month', birth_date)estrae il mese dalla data di nascita.CURRENT_DATEfornisce la data attuale. Prendiamo da essa il mese conDATE_PART().
Unione di formattazione e ordinamento
Ora uniamo tutto quello che abbiamo imparato e aggiungiamo l'ordinamento. Per esempio, creiamo una lista di studenti ordinati per data di nascita.
Esempio 5: Ordinamento per data di nascita
SELECT
CONCAT(first_name, ' ', last_name) AS full_name,
TO_CHAR(birth_date, 'DD-MM-YYYY') AS formatted_birth_date
FROM
students
ORDER BY
birth_date ASC;
L'ordinamento crescente ASC mostrerà prima gli studenti più anziani, mentre quello decrescente DESC — i più giovani.
Unione con valori unici
Infine — un compito con la stellina. Immagina che la nostra università abbia filiali in diverse città, e devi creare una lista di città uniche dove studiano gli studenti, ma in ordine alfabetico.
Esempio 6: Valori unici e ordinamento
SELECT DISTINCT
city
FROM
students
ORDER BY
city ASC;
Cosa fa DISTINCT?
Esclude i valori duplicati, così che ogni città appaia solo una volta nei risultati.
Perché serve tutto questo?
Comodità e bellezza. Quando i dati sono presentati bene, è più facile lavorarci e i capi fanno meno domande.
Prontezza per la vita reale. Potrai generare report automaticamente, lavorare con esportazioni e preparare presentazioni fighe.
Aumenta il tuo valore. SQL non è solo dati. È come renderli chiari e utili.
Usa queste skill per non solo scrivere query, ma creare veri capolavori! Nelle prossime lezioni continueremo a scoprire la magia di PostgreSQL.
GO TO FULL VERSION