age în PostgreSQL

Calculează diferența dintre două date ca interval „simbolic”, în ani, luni și zile, de exemplu vârsta unei persoane.

Sintaxă SQL
age(timestamp_final, timestamp_initial)
age(timestamp)   -- față de current_date, la miezul nopții

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ște age.
  • 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