Torna al Blog
3 min read

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.

Come calcolare l'età in SQL (PostgreSQL, MySQL, 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 data quando 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

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.