La función TRUNC en Oracle es una herramienta muy versátil para trabajar con fechas, ya que permite truncar una fecha a un formato específico, eliminando la parte menos significativa según el nivel de detalle deseado. Esto la convierte en una opción ideal para agrupar datos por períodos como días, meses o años, especialmente en reportes y análisis temporales.
La función TRUNC toma como argumento una fecha y un formato opcional que define el nivel de truncamiento. Por ejemplo, puedes truncar una fecha al inicio del día, al primer día del mes o incluso al comienzo del año. Si no se especifica el formato, la función asume por defecto que el truncamiento será al inicio del día.
En este artículo, primero explicaré la sintaxis básica para que entiendas cómo aplicar esta función en consultas SQL. Luego, incluiré ejemplos prácticos que muestran su uso en situaciones como la agrupación de datos mensuales, la eliminación de horas en reportes diarios y otros escenarios comunes en la gestión de datos.
Si deseas explorar más detalles técnicos y ejemplos avanzados, puedes consultar la documentación oficial de ORACLE sobre TRUNC.
Sintaxis
Escribe la siguiente sintaxis para utilizar la función TRUNC en Oracle:
TRUNC(fecha, formato)
En la sintaxis anterior:
- fecha: campo de fecha.
- formato: formato al que debe truncar la fecha
Ejemplos
Para realizar los ejemplos, se puede utilizar la función SYSDATE
, que devuelve la fecha y hora actuales del sistema, o trabajar con cadenas de texto que deben ser convertidas a formato de fecha utilizando funciones como TO_DATE
. Esto permite mayor flexibilidad al probar diferentes escenarios y personalizar los valores de entrada según las necesidades.
Truncar una fecha al inicio del día
En el siguiente ejemplo truncamos la cadena ’26-Sep-1986 15:30:15′ para que la hora, minuto y segundo sean 0 :
SELECT TO_CHAR( TRUNC(TO_DATE( '26-Sep-1986 15:30:15', 'DD-Mon-YYYY HH24:MI:SS' )), 'DD-Mon-YYYY HH24:MI:SS' ) TRUNCADO FROM dual;

Truncar una fecha al primer día del mes
Aquí, la función TRUNC
toma SYSDATE
y lo trunca al primer día del mes actual. Por ejemplo, si la fecha es 24/01/2025
, devolverá 01/01/2025 00:00:00
.
SELECT TRUNC(SYSDATE, 'MM') AS trunc_month FROM DUAL;

Truncar una fecha al primer día del año
Este ejemplo trunca la fecha actual al primer día del año, configurando la salida como 01/01/2025 00:00:00
.
SELECT TRUNC(SYSDATE, 'YYYY') AS trunc_year FROM DUAL;

Truncar una fecha a la semana
Utilizando el formato 'IW'
, la función devuelve el lunes de la semana ISO correspondiente. Por ejemplo, si la fecha es 24/01/2025
(viernes), el resultado será 20/01/2025
(lunes).
SELECT TRUNC(SYSDATE, 'IW') AS trunc_week FROM DUAL;

Truncar una fecha a un trimestre
Este formato trunca la fecha al primer día del trimestre correspondiente. Por ejemplo, si la fecha es 15/04/2025
, devolverá 01/04/2025
.
SELECT TRUNC(TO_DATE('15-04-2025', 'DD/MM/YYYY'), 'Q') AS TRUNCAR_TRIMESTRE FROM DUAL;

Truncar al inicio de una hora específica
Este ejemplo trunca la fecha y hora actuales al inicio de la hora. Por ejemplo, si la hora es 08:45:30
, devolverá 08:00:00
.
SELECT TRUNC(TO_DATE('15-04-2025', 'DD/MM/YYYY'), 'Q') AS TRUNCAR_TRIMESTRE FROM DUAL;

Truncar a un día específico de la semana
Con el formato 'D'
, la función trunca la fecha al primer día de la semana según la configuración de la base de datos (por defecto, domingo), por ejemplo, si hoy es 24/01/2025 nos devolverá 19/01/2025.
SELECT TRUNC(SYSDATE, 'D') AS TRUNC_DIA FROM DUAL;
