Saltar al contenido

PostgreSQL: días/meses/años entre dos fechas

Nuestros programadores estrellas agotaron sus depósitos de café, en su búsqueda noche y día por la respuesta, hasta que Lola encontró la respuesta en GitHub y hoy la compartimos con nosotros.

Solución:

Simplemente restarlos:

SELECT ('2015-01-12'::date - '2015-01-01'::date) AS days;

El resultado:

 days
------
   11

SELECT
  AGE('2012-03-05', '2010-04-01'),
  DATE_PART('year', AGE('2012-03-05', '2010-04-01')) AS years,
  DATE_PART('month', AGE('2012-03-05', '2010-04-01')) AS months,
  DATE_PART('day', AGE('2012-03-05', '2010-04-01')) AS days;

esto te dará lleno años, meses, días… entre dos fechas:

          age          | years | months | days
-----------------------+-------+--------+------
 1 year 11 mons 4 days |     1 |     11 |    4

Información fechada más detallada.

Pasé un tiempo buscando la mejor respuesta, y creo que la tengo.

Este sql le dará la cantidad de días entre dos fechas como integer:

SELECT
    (EXTRACT(epoch from age('2017-6-15', now())) / 86400)::int

..que, cuando se ejecute hoy (2017-3-28), me proporciona:

?column?
------------
77

La idea errónea sobre la respuesta aceptada:

select age('2010-04-01', '2012-03-05'),
   date_part('year',age('2010-04-01', '2012-03-05')),
   date_part('month',age('2010-04-01', '2012-03-05')),
   date_part('day',age('2010-04-01', '2012-03-05'));

..es que obtendrá la diferencia literal entre las partes de las cadenas de fecha, no la cantidad de tiempo entre las dos fechas.

ES DECIR:

Age(interval)=-1 years -11 mons -4 days;

Years(double precision)=-1;

Months(double precision)=-11;

Days(double precision)=-4;

Te mostramos comentarios y valoraciones

Si te animas, tienes la habilidad dejar un artículo acerca de qué te ha parecido este artículo.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *