RE: trabajo con fechas

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.

In response to

Responses

Browse pgsql-es-ayuda by date

  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