Tema SQL
date_trunc() (PostgreSQL)
Trunca timestamp/date a la unidad indicada (día, mes, hora, etc.). Base para agrupar por periodo y comparar con DATE_TRUNC de otros usos OLAP.
Descripción
date_trunc con unidad y timestamp devuelve el inicio del bucket: por ejemplo month devuelve el primer instante del mes. Unidades desde microsecond hasta millennium según versión. Combina con generate_series para calendarios. MySQL DATE() u otras funciones; SQL Server DATETRUNC desde 2022.
Estructura general
Forma habitual de la sentencia: orden de cláusulas, qué parte filtra, agrupa o proyecta columnas, y qué devuelve el motor. Cópiala como plantilla y sustituye nombres por tus tablas reales.
date_trunc('day', timestamptz '2026-04-12 15:30:00+02')
Componentes
Cada componente tiene un papel concreto en la ejecución lógica de la sentencia. Léelos en orden: así entiendes qué puedes omitir, qué es obligatorio y qué expresiones son válidas en cada sitio según tu motor.
- Zona
- timestamptz respeta zona; timestamp sin zona usa sesión.
- Agrupaciones
- GROUP BY date_trunc aplicado a la columna de fecha para informes por mes u otra unidad.
Ejemplos
Ejemplo 1
SELECT date_trunc('month', CURRENT_TIMESTAMP) AS inicio_mes;
SELECT date_trunc('hour', creado_en), COUNT(*)
FROM eventos
GROUP BY 1;
Ejemplo 2
SELECT date_trunc('quarter', now()) AS inicio_trimestre;
Los ejemplos son ilustrativos. En producción usa consultas parametrizadas (prepared statements), revisa índices y aplica el principio de menor privilegio en cuentas de base de datos.