Fechas y horassolo PostgreSQL

DATE_BIN

Redondea un momento hacia abajo al inicio de un intervalo de cualquier longitud: 15 minutos, 6 horas, 10 días.

Sintaxis

DATE_BIN(INTERVAL '<paso>', <momento>, <origen>)

Como DATE_TRUNC, pero el paso puede ser cualquiera, no solo una hora o un día. El tercer argumento es el origen desde el que se cuentan los tramos: con él, DATE_BIN(INTERVAL '15 minutes', …) da 15:30, 15:45, 16:00. Lo más habitual es usarla para agrupar eventos en tramos de 15 minutos o por turnos. Apareció en PostgreSQL 14.

Datos para los ejemplos

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

Estas tablas ya están creadas en el entorno de pruebas y los ejemplos de abajo las usan. ¿Quieres repetirlo en tu propia base de datos? Copia el SQL.

Al inicio del tramo de 15 minutos
SELECT DATE_BIN(INTERVAL '15 minutes', TIMESTAMP '2026-09-13 15:47', TIMESTAMP '2026-01-01') AS bin_start;
bin_start
2026-09-13 15:45:00
Pedidos por turnos de 12 horas
SELECT id, created_at,
DATE_BIN(INTERVAL '12 hours', created_at, TIMESTAMP '2026-01-01') AS shift_start
FROM orders;
idcreated_atshift_start
12026-07-03 10:15:002026-07-03 00:00:00
22026-07-28 18:40:002026-07-28 12:00:00
32026-08-09 09:05:002026-08-09 00:00:00
42026-08-21 14:30:002026-08-21 12:00:00
52026-09-02 11:00:002026-09-02 00:00:00
El origen desplaza los tramos
SELECT DATE_BIN(INTERVAL '12 hours', TIMESTAMP '2026-09-13 10:15', TIMESTAMP '2026-01-01 08:00') AS shift_from_8;
shift_from_8
2026-09-13 08:00:00

Con el origen a las 08:00, los turnos empiezan a las 08:00 y a las 20:00, así que las 10:15 pertenecen al turno de mañana.

Ten en cuenta

El paso no puede contener meses ni años: DATE_BIN(INTERVAL '1 month', …) da el error timestamps cannot be binned into intervals containing months or years. Para meses, usa DATE_TRUNC('month', …).

Los tramos se cuentan desde el origen, no desde la medianoche. Para 15 minutos vale cualquier origen «redondo», pero para 7 días decide en qué día de la semana empieza cada tramo.