Funcion obsoleta y con errores.
Versión 2 en:
http://manuel.radiohead.cl/2009/dia-habil-anterior-proximo-en-postgresql/
- Cuantos días
- Fecha de Inicio
El uso es de la siguiente forma para los próximos 15 días hábiles a contar de hoy:
1 | SELECT utilidades.proximo_dia_habil(15, CURRENT_DATE); |
Aquí la función:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | --DROP FUNCTION "utilidades"."proximo_dia_habil" (IN in_dias int4, IN in_desde date) CASCADE; /** * Funcion que calcula el proximo dia habil * * @param INT * @param DATE */ CREATE OR REPLACE FUNCTION "utilidades"."proximo_dia_habil" (IN in_dias int4, IN in_desde DATE) RETURNS DATE AS $BODY$ DECLARE fecha_actual DATE := in_desde; fecha_limite DATE; retorno DATE; dias_extras int4 := 0; dias_extras_alt int4 := 0; dia int4; row_fechas RECORD; row_fechas_alt RECORD; BEGIN /** * @date 2009-10-06 * @author Manuel Paillafil Gamboa * @email manuel@radiohead.cl */ fecha_limite := fecha_actual + (in_dias::VARCHAR || ' days')::INTERVAL; FOR row_fechas IN SELECT fecha_actual + s.a AS fecha FROM generate_series(0,in_dias,1) AS s(a) LOOP SELECT EXTRACT(DOW FROM row_fechas.fecha) INTO dia; IF(dia = 6)THEN dias_extras := dias_extras + 2; END IF; END LOOP; dias_extras_alt := 0; FOR row_fechas_alt IN SELECT fecha_actual + s.a AS fecha FROM generate_series(0,in_dias+dias_extras,1) AS s(a) LOOP SELECT EXTRACT(DOW FROM row_fechas_alt.fecha) INTO dia; IF(dia = 6)THEN dias_extras_alt := dias_extras_alt + 2; /** * Las siguientes 3 lineas se descomentan si se desea utilizar una tabla que mantenga los feriados * con fecha absoluta(25 de Diciembre -> 25/12/2009(Formato SQL, EURUPEO)) */ --ELSE IF(row_fechas_alt.fecha IN (SELECT fecha FROM utilidades.tbl_feriados) AND dia != 0)THEN --dias_extras_alt := dias_extras_alt + 1; --END IF; END IF; END LOOP; retorno := fecha_limite + (dias_extras_alt::VARCHAR || ' days')::INTERVAL; RETURN retorno; END; $BODY$ LANGUAGE PLpgSQL CALLED ON NULL INPUT VOLATILE EXTERNAL SECURITY INVOKER; |
Responses to “Próximo día hábil en PostgreSQL”