From: | "Fernando Hevia" <fhevia(at)ip-tel(dot)com(dot)ar> |
---|---|
To: | "'Giorgio PostgreSQL'" <giorgio(dot)pgsql(at)gmail(dot)com>, <pgsql-es-ayuda(at)postgresql(dot)org> |
Subject: | RE: Ayuda con Fechas |
Date: | 2009-06-12 19:15:25 |
Message-ID: | 14FD89B6DAC14A8590D797B8587E12EE@iptel.com.ar |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
> -----Mensaje original-----
> De: Giorgio PostgreSQL
> Enviado el: Jueves, 11 de Junio de 2009 17:58
> Para: pgsql-es-ayuda(at)postgresql(dot)org
> 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
From | Date | Subject | |
---|---|---|---|
Next Message | Carlos Beltran Villamizar | 2009-06-12 19:58:13 | RE: Ayuda con Fechas |
Previous Message | Jenaro Centeno Gómez | 2009-06-12 18:55:26 | Re: Bloqueo en registro-tabla |