[Pgsql-ayuda] a?os bisiestos........

Alvaro Herrera Munoz alvherre@dcc.uchile.cl
Wed, 10 Dec 2003 14:09:24 -0300


On Wed, Dec 10, 2003 at 03:59:13PM +0000, GUSTAVO MARTIN OCAMPO wrote:
> Hola lista, tengo una funcion de la forma.......

Mal.  La funcion debe aceptar año y mes como datos numericos,
no el texto del nombre.  Despues te puedes hacer una envoltura que
tome el texto y lo convierta en el numero, pero eso es un paso posterior.
(if mes ilike ''febrero'' return 2, etc)

Segundo, hacer un IF para cada mes es mal estilo.  Usa una variable para
construir las condiciones que pondras en el where:

inicio := anio || ''-'' || mes || ''-01'';
fin    := anio || ''-'' || mes || ultimoDia(anio, mes);

y luego haces un solo select, usando eso en la clausula BETWEEN.

La funcion ultimoDia() debe retornar el ultimo dia para cada mes ignorando
el año tomando en cuenta bisiestos.  Un pequeño hint, los años son bisiestos
si se cumple esta condicion:

regression=> \set year 2004
regression=> select (:year % 4 = 0) <> (:year % 100 = 0) <> (:year % 400 = 0);
?column?
----------
 t

Suerte,

-- 
Alvaro Herrera (<alvherre[@]dcc.uchile.cl>)
"Pido que me den el Nobel por razones humanitarias" (Nicanor Parra)