RE: Ayuda con Fechas

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

In response to

Responses

Browse pgsql-es-ayuda by date

  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