From: | "Fernando Hevia" <fhevia(at)ip-tel(dot)com(dot)ar> |
---|---|
To: | "'Jose Luis Balle'" <joseluisballe(at)gmail(dot)com>, "'Arcel Labrada Batista'" <alabradab(at)uci(dot)cu> |
Cc: | <pgsql-es-ayuda(at)postgresql(dot)org> |
Subject: | RE: trabajo con fechas |
Date: | 2009-12-04 18:34:38 |
Message-ID: | 5EC9764B0EA144F0A17067A61E7C938D@iptel.com.ar |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
> -----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.
From | Date | Subject | |
---|---|---|---|
Next Message | Jose Luis Balle | 2009-12-04 18:56:35 | Re: trabajo con fechas |
Previous Message | Jose Luis Balle | 2009-12-04 15:33:33 | Re: trabajo con fechas |