Manuel | empty


October 6th, 2009

Próximo día hábil en PostgreSQL

base de datos, by admin.

Funcion obsoleta y con errores.

Versión 2 en:

http://manuel.radiohead.cl/2009/dia-habil-anterior-proximo-en-postgresql/

Una función en PL/pgSQL, que permite saber el proximo día hábil dependiendo de dos valores:

  1. Cuantos días
  2. 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;

Back Top

Responses to “Próximo día hábil en PostgreSQL”

Comments (0) Trackbacks (0) Leave a comment Trackback url
  1. No comments yet.
  1. No trackbacks yet.

Leave a Reply

Your email address will not be published. Required fields are marked *

*