Дати й часлише PostgreSQL

AGE

Рахує, скільки часу минуло між двома моментами, — у роках, місяцях і днях.

Синтаксис

AGE(<пізніший момент>, <раніший момент>)
AGE(<момент>)

Віднімає другий момент від першого й повертає інтервал у звичних одиницях: роки, місяці, дні, а не просто кількість днів. З одним аргументом рахує від сьогоднішньої дати. Звідси й назва: найчастіше так рахують вік людини чи стаж.

Дані для прикладів

orders

idcreated_atamount
12026-07-03 10:15:00120.50
22026-07-28 18:40:0080.25
32026-08-09 09:05:00199.99
42026-08-21 14:30:0045.00
52026-09-02 11:00:0064.75

Ці таблиці вже створено в пісочниці — приклади нижче працюють із ними. Хочеш повторити у своїй базі — скопіюй SQL.

Скільки минуло між датами
SELECT AGE(DATE '2026-09-13', DATE '1990-05-20') AS age;
age
36 years 3 mons 24 days

mons — це місяці: інтервали PostgreSQL показує англійськими скороченнями.

Лише повні роки
SELECT EXTRACT(YEAR FROM AGE(DATE '2026-09-13', DATE '1990-05-20')) AS full_years;
full_years
36
Від кожного замовлення до кінця вересня
SELECT id, created_at,
AGE(TIMESTAMP '2026-09-30', created_at) AS time_left
FROM orders;
idcreated_attime_left
12026-07-03 10:15:002 mons 26 days 13:45:00
22026-07-28 18:40:002 mons 1 day 05:20:00
32026-08-09 09:05:001 mon 20 days 14:55:00
42026-08-21 14:30:001 mon 8 days 09:30:00
52026-09-02 11:00:0027 days 13:00:00

Зверни увагу

Повертає інтервал, а не число. Порівнюють його з інтервалом — AGE(…) > INTERVAL '18 years', а кількість років дістає EXTRACT(YEAR FROM AGE(…)).

Спершу пізніший момент, потім раніший. Переплутаєш — отримаєш від'ємний інтервал: -36 years -3 mons -24 days.

Звичайне віднімання дат — це інше: DATE '2026-09-13' - DATE '1990-05-20' дає кількість днів, 13265, а не роки й місяці.

Схожі функції

Детально в курсі