> -----Mensaje original-----
> De: Giorgio PostgreSQL
> Enviado el: Jueves, 11 de Junio de 2009 17:58
> Para: [email protected]
> Asunto: [pgsql-es-ayuda] Ayuda con Fechas
>
> Hola amigos, como puedo saber si existe un domingo entre dos
> fechas ejemplo
>
> Fecha Inicio -- 11/06/2009 - (Jueves)
> Fecha Final -- 19/06/2009 - (Viernes)
>
> Entre esas fechas existe un Domingo (14/06/2009)
>
> Espero me sigan ayudando como siempre
>
Hola Giorgio,
Posiblemente ya lo hayas resuelto pero me pareció entretenido buscar una
función genérica a tu problema y salió esto:
create or replace function f_encierra_dia(finicio date, ffin date, dow
integer) returns setof date as
$BODY$
DECLARE
dia date;
fin date;
BEGIN
IF finicio < ffin THEN
dia := finicio;
fin := ffin;
ELSE
dia := ffin;
fin := finicio;
END IF;
WHILE dia <= fin LOOP
IF EXTRACT('dow' FROM dia) = dow THEN
RETURN NEXT dia;
END IF;
dia := dia + 1;
END LOOP;
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE;
La función acepta dos fechas y un día de la semana (según código DOW, 0=dom,
1=lun, ..., 6=sab).
Si ese día de la semana está contenido entre ambas fechas devolverá todas
las fechas que correspondan a dicho día.
Ejemplo:
pg=# select * from f_encierra_dia('2009.05.05'::date, '2009.06.12'::date,
0);
f_encierra_dia
----------------
2009-05-10
2009-05-17
2009-05-24
2009-05-31
2009-06-07
(5 rows)
Time: 0.797 ms
Espero sea de ayuda.
Saludos,
Fernando
--
TIP 8: explain analyze es tu amigo