Essa é minha proposta para o problema de quantidade de dias:
create or replace function dias_nummes(mes integer,ano integer) returns 
varchar as
$$
declare
 retorno integer;
begin
 retorno := extract(day from cast( ano||'-'||(mes+1)||'-1' as date)-1);
 return retorno ;
end;
$$  language 'plpgsql';
exemplos:
select dias_nummes(3,2006);
=31
select dias_nummes(2,2006);
=28
select dias_nummes(2,2008);
=29

espero que ajude.

Rodrigo Hjort escreveu:
> Desculpem, mas não resisti! :D
>
> -- http://en.wikipedia.org/wiki/Template:IsLeapYear
> create function ano_bissexto(int) returns boolean as $$
>   select ((mod($1, 4) = 0) and (mod($1, 100) != 0)) or (mod($1, 400) = 0)
> $$ language sql;
>
> select ano_bissexto(1988), ano_bissexto(1998), ano_bissexto(2000),
> ano_bissexto(2006);
>  bissexto | bissexto | bissexto | bissexto
> ----------+----------+----------+----------
>  t        | f        | t        | f
> (1 registro)
>
> create or replace function dias_mes(mes int, ano int) returns int as $$
> declare
>   ret int;
> begin
>   ret = (array[31,28,31,30,31,30,31,31,30,31,30,31])[mes];
>   if (mes = 2 and ano_bissexto(ano)) then
>     ret = ret + 1;
>   end if;
>   return ret;
> end
> $$ language plpgsql;
>
> select dias_mes(2, 2000), dias_mes(2, 2001), dias_mes(11, 2002),
> dias_mes(12, 2005);
>  dias_mes | dias_mes | dias_mes | dias_mes
> ----------+----------+----------+----------
>        29 |       28 |       30 |       31
> (1 registro)
>
>   


-- 
Ivo Nascimento
Iann tech - Desenvolvendo soluções com performance e segurança

_______________________________________________
Grupo de Usuários do PostgreSQL no Brasil
Antes de perguntar consulte o manual
http://pgdocptbr.sourceforge.net/

Para editar suas opções ou sair da lista acesse a página da lista em:
http://pgfoundry.org/mailman/listinfo/brasil-usuarios

Responder a