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