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: función que devuelve el período mensual
Pregunta: ¿Cómo puedo crear una función que devuelva un período correspondiente a un mes?
Un período comienza el primer lunes de cada mes y termina el domingo. Si el domingo no es el 30 o el 31, el programa debe seleccionar el primer domingo del mes siguiente.
Por ejemplo, la función debería devolver algo como esto (fecha de inicio – fecha de finalización):
6 de octubre de 2003 – 2 de noviembre de 2003
Respuesta: La siguiente función acepta como entrada un valor de fecha en el formato “yyyy/mm/dd”. La función toma esta fecha y devuelve el período de tiempo en el que cae la fecha.
create or replace function get_period (pDate varchar2) return varchar2 is v_period_start date; v_period_end date; v_check_date date; begin /* Determine the 1st of the month */ v_check_date := TRUNC(TO_DATE(pDate, 'yyyy/mm/dd'),'MM'); /* Find first monday */ loop exit when TO_NUMBER(TO_CHAR(v_check_date,'d')) = 2; v_check_date := v_check_date + 1; end loop; v_period_start := v_check_date; /* Determine last sunday of current month */ v_period_end := v_period_start + 27; /* Take the sunday in next month if the sunday falls */ /* on the 29th or earlier */ if TO_NUMBER(TO_CHAR(v_period_end, 'dd')) < 30 then v_period_end := v_period_end + 7; end if; return v_period_start || ' - ' || v_period_end; end get_period ;