Daniel Falcão escreveu:
> Olá,
> 
> Após tentar vários recursos do PostgreSQL, consegui realizar o 
> procedimento através de uma função.
> Segue abaixo o código que utilzei:
> 
> create or replace function diasUteis(pDataInicio date, pDataFim date) 
> returns integer
> as $_$ declare
>     _cont integer;
>     _proxData date;
> begin
>     _proxData := pDataInicio;
>     _cont := 0;
> 
>     while _proxData <= pDataFim loop
>         --se _proxData = fim de semana nao incremente _cont
>         if (select extract(DOW from date_trunc('day',_proxData)) not 
> between 1 and 5) is false then
> 
>             --aqui faco uma checagem na minha tabela de 
> feriados/imprensados, se _proxData = feriado,
>             --...
> 
>             _cont := _cont + 1;
>         end if;
> 
>         --incremente _prox
>         _proxData := _proxData + 1;
>     end loop;
>     return _cont;
> end $_$
> language 'plpgsql' volatile;
> 
> --
> 
> Grato pela atenção,
> Daniel Falcão
> 
> On 10/24/07, *Daniel Falcão* <[EMAIL PROTECTED] 
> <mailto:[EMAIL PROTECTED]>> wrote:
> 
>     Olá,
> 
>     Na realidade eu tenho uma tabela de feriados e imprensados, resolvi
>     apenas
>     simplificar a questão para ficar mais fácl o entendimento. Para
>     saber se um
>     determinado dia é sábado ou domingo, podemos usar o "extract (DOW)". :)
> 
>     Estou comecando a acreditar que o SQL nao oferece recursos para esse
>     tipo
>     de situacao, o melhor deve ser construir uma "function" em PL/PGSQL
>     mesmo.
> 
>     []'s
>     Daniel Falcão
> 
> 
>     On 10/24/07, *sergio* <[EMAIL PROTECTED]
>     <mailto:[EMAIL PROTECTED]>> wrote:
> 
>         Não sei se você vai chegar aos 100% de dias uteis, pois existem
>         os feriados
>         municipais por exemplo e até mesmo dias em que a empresa possa
>         vir a não
>         trabalhar. Eu tive que fazer algo semelhante. Optei por fazer
>         uma rotina que
>         retornasse os sabados e domingos e o usuario indicasse
>         manualmente quais os
>         dias que não foram trabalhados.
> 
>         ----- Original Message -----
>         From: "Dickson Guedes" < [EMAIL PROTECTED]
>         <mailto:[EMAIL PROTECTED]>>
>         To: "Comunidade PostgreSQL Brasileira"
>         <pgbr-geral@listas.postgresql.org.br
>         <mailto:pgbr-geral@listas.postgresql.org.br>>
>         Sent: Wednesday, October 24, 2007 1:52 PM
>         Subject: Re: [pgbr-geral] Selecionando dias uteis durante
>         determinado
>         periodo
> 
> 
>         -----BEGIN PGP SIGNED MESSAGE-----
>         Hash: SHA1
> 
>         Daniel Falcão escreveu:
>         >  Olá, (...) 03. Preciso saber justamente a quantidade de "dias
>         úteis
>         >  do mês", mesmo que o indivíduo não tenha comparecido em nenhum dia
>         >  (por exemplo, dias úteis no mês de 09/2007 = 20, no mês 10/2007 =
>         >  23);
>         >
>         >  PS: A função extract (DOW...) é bem interessante, estamos no
>         >  caminho certo.
>         E o que fazer com os feriados? Você vai manter isso também de alguma
>         forma?
> 


Só para constar aqui vai uma expressão SQL que fornece os 
dias úteis de um período. Considerei que existe uma tabela 
com o registro dos feriados e outros dias que não devem ser 
considerados (emendas, pontos facultativos, etc):

SELECT dia FROM
    (SELECT ('2007-10-01'::date+s.a*'1 day'::interval) AS dia
       FROM generate_series(0, '2007-10-31'::date -
                          '2007-10-01'::date, 1) AS s(a)) foo
  WHERE EXTRACT(DOW FROM dia) BETWEEN 1 AND 5
EXCEPT
SELECT dia FROM tab_feriado;

Osvaldo
_______________________________________________
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a