Re: [pgsql-es-ayuda] calculo preciso de años meses y dias

From: Daymel Bonne Solís <daymelbonne(at)gmail(dot)com>
To: felix gonzales <jfgonzales(at)gmail(dot)com>
Cc: PostgreSQL <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: [pgsql-es-ayuda] calculo preciso de años meses y dias
Date: 2017-05-15 17:07:06
Message-ID: CADGXAPhXWv0A2_tkRzk5f+sy=1WZ7sF7xo7sNcXc=6qm9Lh6jw@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Hola nuevamente Felix:

El cálculo de diferencias entre fechas dados en meses y días es un poco
complicado, ya que los resultados pueden ser un poco confusos.

Hay que tener en cuenta que la unidad meses no es una cantidad fija, si
hacemos el cálculo se puede deducir el resultado que arroja la
ejecución de select
AGE('01-05-2017','15-02-2017')

Marzo (mes 03) tiene 31 dias
Abril (mes 04) tiene 30 dias

Ahora, la diferencia en días entre las dos fechas se puede obtener de la
siguiente forma:

dbonne=# select (extract(epoch from timestamptz '01-05-2017') -
extract(epoch from timestamptz '15-02-2017')) / 60 / 60 / 24;
?column?
----------
75
(1 fila)

Finalmente 75 - 61 = 14. Por eso el resultado son 2 meses y 14 días.

Por otro lado, hay que tener especial cuidado con la función
justify_interval que menciona Diego, esta función maneja los intervalos de
meses de 30 días, por lo que:

dbonne=# select justify_interval('30 days');
justify_interval
------------------
1 mon
(1 fila)

dbonne=# select justify_interval('1 mon - 1 hour');
justify_interval
------------------
29 days 23:00:00
(1 fila)

Sin embargo:

dbonne=# select justify_interval('31 days');
justify_interval
------------------
1 mon 1 day
(1 fila)

Finalmente mi recomendación es uses siempre la diferencia en días. No
menciono por cierto, el problema que adiciona los usos horarios que tienen
Horario de Verano, ese es otro tema ;).

Saludos.

El 15 de mayo de 2017, 08:16, felix gonzales<jfgonzales(at)gmail(dot)com> escribió:

> buen día lista,
>
> Necesito obtener años meses y días precisos. utilizando la función AGE
> tengo la dificultad que la primera y ultima linea me devuelve lo mismo,
> alguna alternativa?
>
> select AGE('29-04-2017','15-02-2017');
> select AGE('30-04-2017','15-02-2017');
> select AGE('01-05-2017','15-02-2017');
>
> cualquier comentario bienvenido.
>
> --
> Felix Gonzales
>
>

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Francisco Olarte 2017-05-15 17:15:11 Re: [pgsql-es-ayuda] calculo preciso de años meses y dias
Previous Message felix gonzales 2017-05-15 16:09:06 Re: [pgsql-es-ayuda] Re: [pgsql-es-ayuda] calculo preciso de años meses y dias