Ce face age
age(a, b) returnează a - b exprimat în ani, luni și zile calendaristice: 36 years 7 mons 11 days. Spre deosebire de scăderea simplă a două timestamp-uri (care dă doar zile și ore), age ține cont de lungimea lunilor.
Cu un singur argument, age(data) calculează diferența față de data curentă (current_date), deci rezultatul se schimbă în fiecare zi.
Pentru a extrage doar anii (vârsta în ani împliniți), combină cu EXTRACT(YEAR FROM age(...)).
Parametri
| Parametru | Descriere |
|---|---|
timestamp_final |
Data mai recentă. |
timestamp_initial |
Data mai veche. Dacă este după prima, rezultatul este negativ. |
Ce returnează
Un interval.
Exemple
Exemplul 1: Diferența dintre două date
SELECT age(date '2026-10-25', date '1990-03-14') AS varsta;
Rezultat în psql
varsta
-------------------------
36 years 7 mons 11 days
(1 row)
Exemplul 2: Vârsta în ani împliniți
SELECT nume, data_nasterii,
EXTRACT(YEAR FROM age(date '2026-10-25', data_nasterii)) AS ani
FROM angajati
ORDER BY data_nasterii;
Rezultat în psql
nume | data_nasterii | ani
-------+---------------+-----
Mihai | 1985-12-02 | 40
Ana | 1990-03-14 | 36
Ioana | 2001-10-26 | 24
(3 rows)
Exemplul 3: Față de scăderea simplă
SELECT timestamp '2026-10-25' - timestamp '2026-01-10' AS scadere,
age(timestamp '2026-10-25', timestamp '2026-01-10') AS cu_age;
Rezultat în psql
scadere | cu_age
----------+----------------
288 days | 9 mons 15 days
(1 row)
Greșeli frecvente
- Calculezi vârsta cu
(current_date - data_nasterii) / 365. Anii bisecți strică rezultatul în jurul zilei de naștere. Foloseșteage. - Folosești
age()cu un singur argument în rapoarte care trebuie să dea mereu același rezultat: valoarea depinde de ziua rulării.
Comenzi înrudite
make_date, make_timestamp, make_interval: Construiesc o dată, un timestamp sau un interval din numere separate, fără să lipești texte.