Skip site navigation (1) Skip section navigation (2)

Re: '1 year' = '360 days' ????

From: "Ricardo Perez Lopez" <ricpelo(at)hotmail(dot)com>
To: pgsql-es-ayuda(at)postgresql(dot)org
Cc: arturo(at)llanquihuen(dot)cl
Subject: Re: '1 year' = '360 days' ????
Date: 2004-10-22 18:03:04
Message-ID: BAY15-F23BdyFj9ZYht000074ad@hotmail.com (view raw or flat)
Thread:
Lists: pgsql-es-ayuda
>From: Arturo Llanquihuén Martinez <arturo(at)llanquihuen(dot)cl>
>To: "Ricardo Perez Lopez" 
><ricpelo(at)hotmail(dot)com>,<pgsql-es-ayuda(at)postgresql(dot)org>
>Subject: Re: [pgsql-es-ayuda] '1 year' = '360 days' ????
>Date: Fri, 22 Oct 2004 11:04:08 -0300
>
>hola ricardo

Hola, Arturo. Gracias por responder.

>de partida yo comenzaria con leerme todo lo referente a fechas y horas en 
>la
>documentacion aca.
>http://www.postgresql.org/docs/7.4/static/datatype-datetime.html
>http://www.postgresql.org/docs/7.4/static/functions-formatting.html
>http://www.postgresql.org/docs/7.4/static/functions-datetime.html

Gracias por la sugerencia. Ya le había dedicado muuuuucho tiempo a mirar esa 
documentación antes de dirigirme a la lista :)

>referente a la
>pregunta 1
>no encuentro logico consultar por '1 year' ya que no es una constante,tu
>mismo te das cuenta que depende de si es bisiesto o no, osea el sistema no
>tiene referencia para calcular eso sin mas parametro.

En eso estoy de acuerdo contigo: un año tiene 365 ó 366 si es bisiesto, y 
eso el sistema no lo sabe. Pero... ¿por qué 360 días exactamente? ¿Por qué 
me deja comparar años con días, si no tiene sentido?

>pregunta 2
>  creo que leyendo la info te quedara mas claro como realizar tus consultas 
>y
>como dar formato a la entrada y salida de valores de fecha.


Evidentemente, lo más adecuado parece ser usar la función age, pero aún así 
no entiendo por qué hay dos maneras distintas, y que encima dan resultados 
diferentes.

>pregunta 3 yo usaria la funcion age.

Igual que yo... pero imagina que el intervalo no proviene de la diferencia 
entre dos timestamps. En ese caso, no podría usar la función age, puesto que 
el age sólo sirve para calcular la diferencia entre dos timestamps. Si yo lo 
que tengo es un intervalo '@366 days', ¿no existe alguna manera de convertir 
dicho intervalo en uno que diga '1 year 1 day'? La función age, 
naturalmente, no lo hace (no es su misión).

>
>Saludos.

Saludos, y gracias de todas formas.

>----- Original Message -----
>From: "Ricardo Perez Lopez" <ricpelo(at)hotmail(dot)com>
>To: <pgsql-es-ayuda(at)postgresql(dot)org>
>Sent: Thursday, October 21, 2004 1:42 PM
>Subject: [pgsql-es-ayuda] '1 year' = '360 days' ????
>
>
> > Saludos a toda la lista.
> >
> > Soy un principiante en PostgreSQL, que está actualmente liado 
>aprendiendo
> > cómo funcionan las fechas, las horas, los timestamps y los intervalos.
> >
> > El caso es que tengo tres preguntas que haceros:
> >
> > PRIMERA:
> > --------------
> >
> > Resulta que he comprobado que, para PostgreSQL, un año son 360 días:
> >
> > SELECT '1 year'::timestamp = '360 days'::timestamp;
> >
> >   ?column?
> >   -------------
> >      t
> >
> > Me he quedado de piedra. Yo creía que un año eran 365 días, o 366 si es
> > bisiesto. ¿Es eso normal?
> >
> >
> > SEGUNDA:
> > ---------------
> >
> > Cuando quiero comprobar cuánto tiempo ha pasado entre dos fechas, tengo
>dos
> > opciones (que dan resultados diferentes):
> >
> > SELECT '30-09-04'::timestamp - '30-09-03'::timestamp,
> > age('30-09-04'::timestamp, '30-09-03'::timestamp);
> >
> >     ?column?  |    age
> > -------------------------------
> > @ 366 days  |  @ 1 year
> >
> > Los resultados son diferentes, porque si los comparamos:
> >
> > SELECT ('30-09-04'::timestamp - '30-09-03'::timestamp) =
> > age('30-09-04'::timestamp, '30-09-03'::timestamp);
> >
> >
> >   ?column?
> > --------------
> >    f
> >
> > Naturalmente, da falso, porque como digo en la primera pregunta, un año
>para
> > PostgreSQL consta de 360 días.
> >
> > La pregunta es: ¿es ésto normal? ¿Cuál de los dos métodos es el 
>correcto,
>o
> > el más adecuado? ¿Restar timestamps? ¿O usar la función age?
> >
> >
> > TERCERA:
> > --------------
> >
> > Como comento en la segunda pregunta, cuando hago:
> >
> > SELECT '30-09-04'::timestamp - '30-09-03'::timestamp;
> >
> > el resultado es:
> >
> >   ?column?
> > --------------
> > @ 366 days
> >
> > La pregunta es: ¿no existe alguna manera de "normalizar" el resultado, 
>de
> > forma que dijera:
> >
> > @ 1 year 1 day
> >
> > ?
> >
> > Me parece que sería más correcto "@ 1 year 1 day" que "@ 366 days". ¿No
>hay
> > alguna manera de conseguirlo?
> >
> > Gracias a todos de antemano.
> >
> > Ricardo.
> >
> > _________________________________________________________________
> > Moda para esta temporada. Ponte al día de todas las tendencias.
> > http://www.msn.es/Mujer/moda/default.asp
> >
> >
> > ---------------------------(end of broadcast)---------------------------
> > TIP 2: puedes desuscribirte de todas las listas simultáneamente
> >     (envíe "unregister SuDirecciónDeCorreo" a majordomo(at)postgresql(dot)org)

_________________________________________________________________
La información más fresca desde diferentes puntos de vista en la Revista de 
Prensa de MSN. http://es.newsbot.msn.com/


pgsql-es-ayuda by date

Next:From: Martín MarquésDate: 2004-10-22 19:32:31
Subject: Re: Indice para columna date
Previous:From: Jaime CasanovaDate: 2004-10-22 17:25:01
Subject: Re: '1 year' = '360 days' ????

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group