Referencia de funciones

DATE_TRUNC

Redondea hacia abajo una fecha con hora o un intervalo hasta la unidad indicada.

PostgreSQL 17.9
DATE_TRUNC(field, source[, time_zone])
  • [ ]parte opcional
field
Unidad hasta la que se redondea
text
'microseconds''milliseconds''second''minute''hour''day''week''month''quarter''year''decade''century''millennium'
source
Fecha con hora o intervalo
timestamp | interval
time_zone
Zona horaria para un valor timestamptz, por defecto la del ajuste TimeZone
textOpcional

Valor devuelto

Valor del mismo tipo que source, con las partes menores puestas a cero: con month, el día 1 del mes a las 00:00; con date, timestamptz

Ejemplos

Inicio del mes para una fecha

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

El lunes de la misma semana

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

Importe de los pagos por meses

PostgreSQL 17.9
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

Detalles

La semana ('week') empieza el lunes. Con un intervalo esta unidad no funciona: la consulta termina con el error unit "week" not supported for type interval. Para un valor date el resultado es de tipo timestamptz: para volver a obtener una fecha, añade ::date. La función resulta práctica para agrupar por periodos: GROUP BY DATE_TRUNC('month', date).

Véase también