In Postgres, age()
la funzione restituisce l'età in base a due variabili timestamp o data.
Il risultato viene restituito utilizzando anni e mesi, anziché solo giorni.
Ad esempio, un risultato potrebbe essere simile al seguente:3 anni 2 mesi 30 giorni .
Sintassi
Puoi utilizzare una delle due seguenti sintassi:
age(timestamp)
age(timestamp, timestamp)
Il primo restituisce l'età in base alla data corrente. In particolare, sottrae da current_date()
(a mezzanotte).
La seconda sintassi consente di ottenere la data in base a due date esplicite. L'uso di questa sintassi fa sì che la seconda data venga sottratta dalla prima. In altre parole, l'età non si basa sulla data odierna, ma sulla data fornita nel primo argomento.
Esempio 1:utilizzare la data odierna
Ecco un esempio per dimostrare la prima sintassi.
SELECT age(timestamp '1987-03-14');
Risultato:
33 years 2 mons 30 days
In questo caso, ho fornito un unico argomento. Il age()
la funzione ha quindi sottratto quello dalla data odierna (la data in cui ho eseguito la query) e otteniamo il risultato.
Solo per dimostrarlo ulteriormente, eccolo di nuovo, ma questa volta insieme a current_date()
per mostrare la data in cui ho eseguito la query.
SELECT
current_date,
age(timestamp '1987-03-14');
Risultato:
current_date | age --------------+------------------------- 2020-06-13 | 33 years 2 mons 30 days
Esempio 2:utilizzare una data personalizzata
In questo esempio, fornisco due date con cui confrontare. Pertanto, l'età non è basata sulla data odierna. Si basa sulla prima data fornita a age()
funzione.
SELECT age(timestamp '2001-01-01', timestamp '2000-03-14');
Risultato:
9 mons 18 days
In questo caso, l'età è inferiore a un anno e quindi l'anno non è menzionato nei risultati.
Ecco un altro esempio che mostra cosa succede se cambia solo l'anno (cioè le porzioni di mese e giorno delle due date sono esattamente le stesse, ma l'anno è diverso).
SELECT age(timestamp '2007-01-01', timestamp '2000-01-01');
Risultato:
7 years
Quindi, ancora una volta, omette semplicemente le parti che non sono rilevanti (in questo caso i mesi e i giorni).
Esempio 3 – Date identiche
Ecco cosa succede se entrambe le date sono uguali.
SELECT age(timestamp '2001-01-01', timestamp '2001-01-01');
Risultato:
00:00:00
Esempio 4 – Età negativa
Se la seconda data è successiva alla prima data, ti ritroverai con un'età negativa.
SELECT age(timestamp '2001-01-01', timestamp '2002-03-07');
Risultato:
-1 years -2 mons -6 days
Qui il segno meno è anteposto a tutti i componenti della data (cioè i componenti anno, mese e giorni).
Esempio 5 – Età in anni
Se vuoi solo l'età in anni, puoi usare uno dei due extract()
o date_part()
per estrarre l'anno da age()
valore di ritorno della funzione.
Ecco un esempio che utilizza extract()
funzione:
SELECT extract(year from age(timestamp '1997-10-25'));
Risultato:
22.0
Ecco come appare quando lo eseguo in Azure Data Studio.
Quando lo eseguo in psql , ho questo:
22
Entrambi extract()
e date_part()
restituiscono i risultati utilizzando il tipo di dati a doppia precisione.
Puoi convertirlo in un numero intero (o in un altro tipo di dati), se necessario, aggiungendolo con ::int
.
SELECT extract(year from age(timestamp '1997-10-25'))::int;
Risultato:
22