Re: trabajo con fechas

From: Jose Luis Balle <joseluisballe(at)gmail(dot)com>
To: Fernando Hevia <fhevia(at)ip-tel(dot)com(dot)ar>
Cc: Arcel Labrada Batista <alabradab(at)uci(dot)cu>, pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: trabajo con fechas
Date: 2009-12-04 18:56:35
Message-ID: 6d87542d0912041056x74c67632qc72032b5d375d064@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Efectivamente, porque en un lugar usé current_date y en otro una fecha
a dedo y quedo como el de sentarse.
Pero el razonamiento está bien aunque mal implementado.
Ahora si:
Distancia al domingo (sunday=0): 0 - extract ( dow from '20091129'::date )
a la fecha en cuestion le tengo que restar esa diferencia para llegar
a domingo de esta semana, si le resto 7 días más estoy en el domingo
de la semana anterior
'20091129'::date - (7- (0 - extract ( dow from '20091129'::date )))::integer
Cambia 20091129 por lo que quieras que tiene que funcionar, no se..
años bisiestos?

Creo que ahora si.

select '20091129'::date - (7- (0 - extract ( dow from '20091129'::date
)))::integer as distancialdomingo,
'20091129'::date - (7- (6 - extract ( dow from '20091129'::date
)))::integer as distancialsabado

El día 4 de diciembre de 2009 15:34, Fernando Hevia
<fhevia(at)ip-tel(dot)com(dot)ar> escribió:
>
>
>> -----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.
>
>

--
"Los derechos humanos deberían ser para las personas...."

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Fernando Hevia 2009-12-04 19:37:53 RE: trabajo con fechas
Previous Message Fernando Hevia 2009-12-04 18:34:38 RE: trabajo con fechas