Come calcolare l'età in SQL (PostgreSQL, MySQL, SQL Server)
Impara pratici modelli SQL per calcolare l'età a partire da una data di nascita: anni completati, anni e mesi esatti ed età a partire da una data specifica. Include esempi per PostgreSQL, MySQL e SQL Server.
Hai bisogno di calcolare l'età in SQL a partire da una data di nascita? Questa guida mostra query pratiche e pronte per la copia per i database più comuni. Imparerai a calcolare:
- Età in anni (anni completati)
- Età a una data specifica (non solo oggi)
- Uno stile di output esatto (anni e mesi) quando hai bisogno di maggiori dettagli
1) Decidi cosa significa "età" per il tuo caso d'uso
La maggior parte della logica aziendale utilizza anni completati. Ciò significa che qualcuno nato il 10-06-2000 avrà 25 anni il 10-06-2026, non prima. Fai attenzione alla semplice sottrazione dell'anno come ANNO(oggi) - ANNO(data), perché è sbagliato prima del compleanno.
2) PostgreSQL: età in anni (anni completati)
PostgreSQL ha una funzione age() incorporata che restituisce un intervallo. Estrai gli anni interi in questo modo:
SELECT EXTRACT(YEAR FROM age(CURRENT_DATE, dob)) AS age_years
DALLE persone;
PostgreSQL: età a partire da una data specifica
SELECT EXTRACT(YEAR FROM age(DATE '2026-02-23', dob)) AS age_years
DALLE persone;
3) MySQL: età in anni (anni completati)
In MySQL, utilizza TIMESTAMPDIFF:
SELECT TIMESTAMPDIFF(YEAR, dob, CURDATE()) AS age_years
DALLE persone;
MySQL: età a partire da una data specifica
SELECT TIMESTAMPDIFF(YEAR, dob, DATE('2026-02-23')) AS age_years
DALLE persone;
4) SQL Server: età in anni (anni completati)
Uno schema comune in SQL Server è DATEDIFF meno un controllo della data di nascita:
SELEZIONA
DATEDIFF(ANNO, dob, CAST(GETDATE() COME data))
- CASO
WHEN DATEADD(YEAR, DATEDIFF(YEAR, dob, CAST(GETDATE() AS data)), dob) > CAST(GETDATE() AS data)
POI 1 ALTRO 0
FINE AS età_anni
DALLE persone;
SQL Server: età a partire da una data specifica
DICHIARA @as_of date = '2026-02-23';
SELEZIONA
DATEDIFF(ANNO, dob, @come_di)
- CASO
WHEN DATEADD(ANNO, DATEDIFF(ANNO, dob, @as_of), dob) > @as_of
POI 1 ALTRO 0
FINE AS età_anni
DALLE persone;
5) Esempio di età esatta (anni e mesi)
Se vuoi una presentazione "esatta" come "31 anni 4 mesi", calcola prima gli anni, poi i mesi dopo l'ultimo compleanno. Ecco un esempio di PostgreSQL:
CON base AS (
SELECT dob, CURRENT_DATE AS dal_di
DALLE persone
)
SELEZIONA
EXTRACT(YEAR FROM age(as_of, dob)) AS anni,
EXTRACT(MESE DA età(as_of, dob)) AS mesi
DA base;
Insidie comuni
- Fusi orari: memorizza il DOB come
dataquando possibile. Le date e gli orari possono spostarsi tra le zone. - Compleanni dei giorni bisestili: definisce cosa succede negli anni non bisestili. La maggior parte dei sistemi considera i compleanni del 29-02-2004 come 28-02 o 01-03 a seconda della policy.
- DOB nullo o futuro: filtra o proteggi, altrimentila tua query restituirà valori nulli o negativi.
Controllo rapido dell'integrità
Se desideri verificare rapidamente un singolo DOB, puoi utilizzare il calcolatore online: Calcola l'età online.
Guide correlate
- Come calcolare l'età (guida completa)
- Come calcolare l'età in Excel
- Come calcolare l'età in JavaScript
Domande frequenti
Perché ANNO(oggi) meno ANNO(data) è sbagliato?
Ignora se il compleanno è già avvenuto quest'anno, quindi sovrastima l'età prima del compleanno.
Qual è il tipo SQL più sicuro per la data di nascita?
Utilizza una colonna data (non datetime) per DOB se ti interessa solo il giorno di calendario.