> -----Mensaje original-----
> De: Giorgio PostgreSQL
> Enviado el: Jueves, 11 de Junio de 2009 17:58
> Para: pgsql-es-ayuda@postgresql.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

--
TIP 8: explain analyze es tu amigo

Responder a