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