60
 
21/09/2019

Función de Oracle que permite calcular los días de diferencia entre 2 fechas

Función de Oracle que permite calcular los días de diferencia entre 2 fechasFunción de Oracle para calcular los días que hay entre dos fechas que se pasan como argumentos, controlando los errores con una excepción.

Esta función recibe dos valores de entrada de tipo FECHA (fecha inicial y fecha final), donde se calcula la cantidad de meses que existe entre ambas y el valor resultante es adicionado a la fecha inicial previo a restar dicho resultado de la fecha final pasada.

Al igual que la función para calcular los meses que hay entre dos fechas, se usan las funciones propias de Oracle TRUNC, MONTHS_BETWEEN y FLOOR , pero se aplica al final la función ADD_MONTHS para sumar un valor entero de meses a una fecha.

Esta función ha sido probada en versiones 8i, 9i, 10g y 11g de la base de datos Oracle, su lenguaje de programación procedural y de consultas estructuradas PL/SQL.

Si este recurso te ha servido de ayuda recuerda que puedes apoyar mi trabajo realizando una contribución voluntaria a través de mi perfil de usuario de la página y/o puedes enviar tus comentarios a través del sistema de contacto.
CREATE OR REPLACE FUNCTION F_DIAS(p_fecini DATE, p_fecfin DATE) 
RETURN NUMBER
IS
/*******************************************************************
    * Función:      f_dias
    * Descripción:  Calcula el total de días entre 2 fechas
    * Parámetros:   p_fecini Fecha inicial
    *                      p_fecfin Fecha final
    * Retorna:  v_dias  Total de días
    * ***************************************************************
*/ 
v_dias  NUMBER := 0;

BEGIN
        
    /* Calcular los días que hay entre dos fechas */
SELECT TRUNC ( p_fecfin )
       - ADD_MONTHS (
            TRUNC ( p_fecini ),
            FLOOR ( MONTHS_BETWEEN ( TRUNC ( p_fecfin ), TRUNC ( p_fecini ) ) ) ) + 1
    INTO v_dias                   
    FROM DUAL;
RETURN v_dias;
EXCEPTION
        WHEN OTHERS
            THEN
                RETURN 0;
                
END F_DIAS;

/* Ejecutar F_DIAS */
SELECT F_DIAS(TO_DATE('24-DEC-2010'), SYSDATE) dias FROM DUAL;
Consulta Lo+ Top de Base De Datos
Todos los titulares en un solo lugar...