sql >> Base de Datos >  >> RDS >> SQLite

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

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):

SELECT
  id,
  departure,
  arrival,
  JULIANDAY(arrival) - JULIANDAY(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.8125
2 2019-09-12 15:50:00 2019-10-23 10:30:30 40.778125000186265
3 2018-07-14 16:15:00 2018-07-14 20:40:30 0,18437499972060323
4 2018-01-05 08:35:00 2019-01-08 14:00:00 368.2256944444962

Discusión:

Para calcular la diferencia entre las marcas de tiempo en SQLite, use JULIANDAY() función para ambas marcas de tiempo, luego reste una de la otra. De esta manera, obtienes la diferencia en días. La parte entera de la diferencia es el número de días completos y la parte decimal representa un día parcial.

El JULIANDAY() La función devuelve el número de días transcurridos desde el mediodía, hora del meridiano de Greenwich, el 24 de noviembre de 4714 a.C. Puede leer más sobre esta función en la documentación.

Solución 2 (diferencia en segundos):

SELECT
  id,
  departure,
  arrival,
  ROUND((JULIANDAY(arrival) - JULIANDAY(departure)) * 86400) AS difference
FROM travel;

El resultado es:

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, multiplique la diferencia decimal en días por la cantidad de segundos en un día, lo que equivale a 24 * 60 * 60 = 86400 , o el producto del número de horas en un día, el número de minutos en una hora, y el número de segundos en un minuto. Dado que las partes decimales de la diferencia en días no son 100 % precisas debido a errores de redondeo, es posible que obtenga una parte decimal distinta de cero. Redondeando el resultado al entero más cercano, usando ROUND() función, soluciona el problema.

Del mismo modo, podrías calcular la diferencia en minutos o en horas. Simplemente cambie * 86400 to * 3600 (minutos) o * 60 (horas).