Справочник по функциям

DATE_TRUNC

Округляет дату со временем или интервал вниз до указанной единицы.

PostgreSQL 17.5
DATE_TRUNC(field, source[, time_zone])

Параметры

fieldtext
Единица округления
Значения:'microseconds''milliseconds''second''minute''hour''day''week''month''quarter''year''decade''century''millennium'
sourcetimestamp | interval
Дата со временем или интервал
time_zonetextнеобязательный
Часовой пояс для значения timestamptz, по умолчанию из настройки TimeZone

Возвращаемое значение

Значение того же типа, что source, с обнулёнными младшими частями: для month — первое число месяца в 00:00; для date — timestamptz

Примеры

Начало месяца для даты

PostgreSQL 17.5
SELECT DATE_TRUNC('month', TIMESTAMP '2023-02-15 10:20:30');
date_trunc
2023-02-01

Понедельник той же недели

PostgreSQL 17.5
SELECT DATE_TRUNC('week', TIMESTAMP '2024-03-08 14:30:00');
date_trunc
2024-03-04

Сумма платежей по месяцам

PostgreSQL 17.5
SELECT DATE_TRUNC('month', date) AS MONTH,
	SUM(amount * unit_price) AS total
FROM Payments
GROUP BY DATE_TRUNC('month', date)
ORDER BY MONTH;
monthtotal
2005-02-012140
2005-03-012159
2005-04-0164
2005-05-01135
2005-06-012475
2005-07-01770
2005-08-012200
2005-09-015730
2005-10-0166230
2005-11-01250

Подробности

Неделя ('week') начинается с понедельника. Для значения date результат имеет тип timestamptz: чтобы снова получить дату, добавьте ::date. Функция удобна для группировки по периодам: GROUP BY DATE_TRUNC('month', date).

Смотрите также