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.