Función TRUNC en Oracle

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;

Escribir un comentario