> -----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