sql >> Base de Datos >  >> RDS >> PostgreSQL

Cómo calcular la diferencia entre dos marcas de tiempo en PostgreSQL

Problema:

Tienes dos columnas del tipo timestamp y quieres calcular la diferencia entre ellos.

Ejemplo:

En el travel tabla, hay tres columnas:id , departure y arrival . Le gustaría calcular la diferencia entre la arrival y la departure .

El travel la tabla se ve así:

id salida llegada
1 2018-03-25 12:00:00 2018-04-05 07:30:00
2 2019-09-12 15:50:00 2019-10-23 10:30:30
3 2018-07-14 16:15:00 2018-07-14 20:40:30
4 2018-01-05 08:35:00 2019-01-08 14:00:00

Solución 1 (diferencia en días, horas, minutos y segundos):

SELECT
  id,
  departure,
  arrival,
  arrival - departure AS difference
FROM travel;

El resultado es:

id salida llegada diferencia
1 2018-03-25 12:00:00 2018-04-05 07:30:00 10 días 19:30:00
2 2019-09-12 15:50:00 2019-10-23 10:30:30 40 días 18:40:30
3 2018-07-14 16:15:00 2018-07-14 20:40:30 04:25:30
4 2018-01-05 08:35:00 2019-01-08 14:00:00 368 días 05:25:00

Discusión:

Para calcular la diferencia entre las marcas de tiempo en PostgreSQL, simplemente reste la marca de tiempo de inicio de la marca de tiempo final. Aquí sería arrival - departure . La diferencia será del tipo interval , lo que significa que lo verá en días, horas, minutos y segundos.

Solución 2 (diferencia en años, meses, días, horas, minutos y segundos):

SELECT
  id,
  departure,
  arrival,
  AGE(arrival, departure) AS difference
FROM travel;

El resultado es:

id salida llegada diferencia
1 2018-03-25 12:00:00 2018-04-05 07:30:00 10 días 19:30:00
2 2019-09-12 15:50:00 2019-10-23 10:30:30 1 lunes 10 días 18:40:30
3 2018-07-14 16:15:00 2018-07-14 20:40:30 04:25:30
4 2018-01-05 08:35:00 2019-01-08 14:00:00 1 año 3 días 05:25:00

Discusión:

Si desea obtener la diferencia en años, meses, días, horas, minutos y segundos, use AGE(end, start) función. Aquí sería AGE(arrival, departure) . En esta solución, la columna resultante también es del tipo interval .

Solución 3 (diferencia en segundos):

SELECT
  id,
  departure,
  arrival,
  EXTRACT(EPOCH FROM (arrival - departure)) AS difference
FROM travel;
id salida llegada diferencia
1 2018-03-25 12:00:00 2018-04-05 07:30:00 934200
2 2019-09-12 15:50:00 2019-10-23 10:30:30 3523230
3 2018-07-14 16:15:00 2018-07-14 20:40:30 15930
4 2018-01-05 08:35:00 2019-01-08 14:00:00 31814700

Discusión:

Si desea calcular la diferencia entre las marcas de tiempo en segundos en PostgreSQL, reste una fecha de la otra (aquí:arrival - departure ) luego extraiga EPOCH de la diferencia para obtenerlo en segundos. Aquí hay más sobre el EXTRACT() función.


No