domingo, 5 de mayo de 2013

Función que cuenta días laborables

Saludos a todos, después un largo tiempo de para vuelvo a escribir un tip para poder obtener los días laborales en PostgreSQL 9.1, lo que os muestro es una modificación de una función existente.

Gracias a mi amigo Javier Altamirano por los datos y parte de la función.

Funcionalidades:

  • Actual: Reconoce sábados y domingos.
  • Modificación: Reconocer días no laborables decretados por el estado peruano.

Sintaxis:

             días = dbcont_diaslab(fechaInicio, fechaFin)


Uso:


            select dbcont_diaslab('2013-06-23','2013-06-29') 

Pueden usar CURRENT_DATE.
           
Código:


CREATE OR REPLACE FUNCTION dbcont_diaslab(date, date)
  RETURNS bigint AS
$BODY$
SELECT count(*) FROM
(SELECT extract('dow' FROM $1+x) AS dow
FROM generate_series(0,$2-$1) x WHERE $1+x NOT IN (SELECT fe_no_labo FROM dias_no_labo WHERE extract('dow' FROM fe_no_labo) NOT IN(0,6))) AS foo
WHERE dow BETWEEN 1 AND 5;
$BODY$
  LANGUAGE sql VOLATILE
  COST 100;
ALTER FUNCTION dbcont_diaslab(date, date) OWNER TO postgres;

Nota:

En la tabla dias_no_labo se cuenta con registros de feriados nacionales y del sector público de Perú, sábados y domingos del 2013.

Los sábados y domingos no los tengo para realizar el cálculo, por que ya lo estoy haciendo en la parte final de la función.

Descargar:

DIAS_NO_LABO.backup

Saludos.