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 redondeatext'microseconds''milliseconds''second''minute''hour''day''week''month''quarter''year''decade''century''millennium'
- source
- Fecha con hora o intervalotimestamp | interval
- time_zone
- Zona horaria para un valor timestamptz, por defecto la del ajuste TimeZonetextOpcional
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');El lunes de la misma semana
PostgreSQL 17.9
SELECT DATE_TRUNC('week', TIMESTAMP '2024-03-08 14:30:00');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;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).