Come calcolare l’età con Microsoft Access

Se utilizziamo un campo calcolato in una query, diventa semplice calcolare l’età con Microsoft Access.

Supponiamo di avere la tabella tblUtenti con i seguenti campi:

Struttura Tabella Età

 

e i seguenti dati:

Dati per Tabella Età

L’età è il tipico dato volatile, che non memorizziamo in una tabella, altrimenti dovremmo controllare ogni giorno se sia da modificare.

Perciò utilizzeremo una query con una colonna calcolata.

Per colonna calcolata s’intende una colonna il cui valore non è memorizzato in tabella, ma che deriva da calcoli effettuati su altri campi esistenti in tabella.

Prepariamo la query:

Query Calcolo Età

 

Aggiungiamo la colonna calcolata con questa formula:

Eta:

DateDiff("aaaa";[DataNascita];Date()) -IIf(Format([DataNascita];"mmgg") > Format(Date();"mmgg");1;0)

Analizziamo ora i componenti della formula.

DateDiff restituisce la differenza tra due date calcolata in base al primo argomento. Nell’esempio “aaaa” significa che vogliamo ottenere la differenza in anni.

Date restituisce la data del sistema, per noi oggi 18/5/2019.

Potrebbe sembrare sufficiente questo per calcolare l’età in anni, senza l’uso della funzione IIF.

Tuttavia, il risultato non sarebbe sempre corretto!

Pensiamo a un utente nato il 19/5/1998. Oggi è il 18/5/2019, perciò il nostro utente ha ancora 20 anni.

Se usassimo semplicemente questa formula:

DateDiff("aaaa";[DataNascita];Date())

DateDiff(intervallo; Data_1; Data_2)

Sul sito Microsoft trovi una descrizione approfondita della funzione DateDiff. 

il risultato, errato!, sarebbe invece 21, calcolato come differenza in anni tra 2019 e 1998.

In sostanza, DateDiff non tiene conto di mese e giorno e non valuta che il ventunesimo anno non è ancora stato compiuto, manca infatti 1 giorno.

Per questo motivo occorre verificare se il mesegiorno della data di nascita sia maggiore del mesegiorno della data di oggi. Se è così, dobbiamo sottrarre 1 al risultato.

A tal fine utilizziamo la funzione IIf, ossia If immediata, simile alla funzione SE in Excel.

IIf(Format([DataNascita];”mmgg”) > Format(Date();”mmgg”);1;0)

IIf(test; se_vero; se_falso)

Il test è verificare se mesegiorno della data di nascita sia maggiore di mesegiorno della data di oggi. In caso il test sia verificato, la funzione restituisce 1, altrimenti restituisce 0.

La funzione Format restituisce la data secondo il formato specificato. In questo è simile alla funzione Testo che abbiamo in Excel.

Funzione Format

Le celle in giallo rappresentano il risultato della funzione Format.

Il test è verificare se 0519 > 0518.

Dato che il test è verificato, la funzione restituisce 1, che viene poi sottratto al conteggio degli anni restituito dalla funzione DateDiff.

Query Calcolo Età