Uau, que bizarro! O PostgreSQL aceita mesmo entrada de datas como
"01/13/2006"... :)

rodrigo=# select extract(day from to_date(2006 || '-' || a + 1 ||
'-01', 'YYYY-MM-DD') - 1) from generate_series(1,12) a;
 date_part
-----------
        31
        28
        31
        30
        31
        30
        31
        31
        30
        31
        30
        31
(12 registros)

rodrigo=# select extract(day from to_date(2000 || '-' || a + 1 ||
'-01', 'YYYY-MM-DD') - 1) from generate_series(1,12) a;
 date_part
-----------
        31
        29
        31
        30
        31
        30
        31
        31
        30
        31
        30
        31
(12 registros)

Sendo assim, a função pode ser ainda bem mais simples:

create function dias_no_mes(int,int) returns int as $$
select extract(day from to_date($2 || '-' || $1 + 1 || '-01',
'YYYY-MM-DD') - 1)::int
$$ language sql immutable strict;

E só pra conferir:

rodrigo=# select mes, ano, dias_no_mes(mes, ano) from
generate_series(1,12) mes, generate_series(2000,2001) ano order by 2,
1;
 mes | ano  | dias_no_mes
-----+------+-------------
   1 | 2000 |          31
   2 | 2000 |          29
   3 | 2000 |          31
   4 | 2000 |          30
   5 | 2000 |          31
   6 | 2000 |          30
   7 | 2000 |          31
   8 | 2000 |          31
   9 | 2000 |          30
  10 | 2000 |          31
  11 | 2000 |          30
  12 | 2000 |          31
   1 | 2001 |          31
   2 | 2001 |          28
   3 | 2001 |          31
   4 | 2001 |          30
   5 | 2001 |          31
   6 | 2001 |          30
   7 | 2001 |          31
   8 | 2001 |          31
   9 | 2001 |          30
  10 | 2001 |          31
  11 | 2001 |          30
  12 | 2001 |          31
(24 registros)

Resta agora saber qual das implementações causará menos overhead para
uma carga mais pesada, lembrando de usar o parâmetro IMMUTABLE em
todas.

-- 
Rodrigo Hjort
http://icewall.org/~hjort


2006/12/6, Osvaldo Rosario Kussama <[EMAIL PROTECTED]>:
> Rodrigo Hjort escreveu:
> > Hmm, e funcionará para Dezembro?
> >
>
> Sim!
>
> bdteste=# SELECT to_date(2006 || '-' || 12+1 || '-01', 'YYYY-MM-DD') - 1;
>    ?column?
> ------------
>   2006-12-31
> (1 registro)
>
> []s
> Osvaldo
>
_______________________________________________
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