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