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

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;
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;
SELECT F_DIAS(TO_DATE('24-DEC-2010'), SYSDATE) dias FROM DUAL;
Consulta Lo+ Top de Base De Datos