Los datos expuestos en este blog, son solo de índole informativo. Por favor realiza siempre una copia de seguridad antes de realizar cualquier cambio en tu proyecto.
Oracle/PLSQL: agregar fecha a fecha (omitir sábado y domingo)
Problema: He logrado agregar días a una fecha dada en mi programa. Mi pregunta es ¿cómo puedo manipular el programa para saltarme los fines de semana y días festivos?
Por ejemplo:
Si la fecha es 19 de septiembre de 2003 y le sumo 2 días, la fecha resultante debe ser 23/9/2003.
Respuesta: Para omitir los fines de semana al agregar días a una fecha, debe crear una función personalizada. A continuación se muestra la función que escribimos llamada custom_add_days. Acepta dos parámetros: start_date_in y days_in.
Esta función toma el valor start_date_in y agrega el número de días a la variable days_in, omitiendo el sábado y el domingo.
Esta característica no omite los días festivos porque Oracle no puede identificar qué días son festivos. Sin embargo, podría intentar llenar una tabla de vacaciones y luego consultar esa tabla para determinar los días adicionales que se saltearán.
CREATE OR REPLACE Function custom_add_days (start_date_in date, days_in number) return date IS v_counter number; v_new_date date; v_day_number number; BEGIN /* This routine will add a specified number of days (ie: days_in) to a date (ie: start_date). */ /* It will skip all weekend days - Saturdays and Sundays */ v_counter := 1; v_new_date := start_date_in; /* Loop to determine how many days to add */ while v_counter <= days_in loop /* Add a day */ v_new_date := v_new_date + 1; v_day_number := TO_CHAR(v_new_date, 'd'); /* Increment counter if day falls between Monday to Friday */ if v_day_number >= 2 and v_day_number <= 6 then v_counter := v_counter + 1; end if; end loop; RETURN v_new_date; EXCEPTION WHEN OTHERS THEN raise_application_error(-20001,'An error was encountered - '||SQLCODE||' -ERROR- '||SQLERRM); END;