> -----Mensaje original-----
> De: Jose Luis Balle
>
> Usa la función extract para obtener el día de la semana de la
> fecha, luego calculá la distancia al lunes y restala a hoy,
> le volves a restar 7 y estas en el lunes pasado.
> Espero haber sido claro :O)
> Acá va un ejemplo:
> select current_date - (6 - extract ( dow from
> '20091202'::date ) )::integer - 7 as lunes, current_date - (2
> - extract ( dow from '20091202'::date ) )::integer - 7 as
> viernes Saludos.
> PD: Puede haber mejores algoritmos ...
>
Hmm, no retorna bien los límites. Además, si la fecha cae domingo retorna
los límites de la misma semana y no la pasada.
La solución que encontré es un poco más fea pero parece funcionar en todos
los casos.
Va usando de ejemplo 29/11 que fue domingo:
SELECT CASE WHEN extract(dow from '2009.11.29'::date) = 0 THEN
'2009.11.29'::date - 14
ELSE '2009.11.29'::date - extract(dow from
'2009.11.29'::date)::integer - 6 END AS Lunes,
CASE WHEN extract(dow from '2009.11.29'::date) = 0 THEN
'2009.11.29'::date - 7
ELSE '2009.11.29'::date - extract(dow from
'2009.11.29'::date)::integer END AS Domingo
Si a alguno se le ocurre como resolverlo sin el case para contemplar el
domingo soy todo oidos.
Saludos.
--
TIP 9: visita nuestro canal de IRC #postgresql-es en irc.freenode.net