Problème :
Vous avez deux colonnes de type timestamp
et vous voulez calculer la différence entre eux.
Exemple :
Dans le travel
table, il y a trois colonnes :id
, departure
, et arrival
. Vous souhaitez calculer la différence entre l'arrival
et le departure
.
Le travel
le tableau ressemble à ceci :
identifiant | départ | arrivée |
---|---|---|
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 |
Solution 1 (différence en jours) :
SELECT id, departure, arrival, JULIANDAY(arrival) - JULIANDAY(departure) AS difference FROM travel;
Le résultat est :
identifiant | départ | arrivée | différence |
---|---|---|---|
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 |
Discussion :
Pour calculer la différence entre les horodatages dans SQLite, utilisez le JULIANDAY()
fonction pour les deux horodatages, puis soustrayez l'un de l'autre. De cette façon, vous obtenez la différence en jours. La partie entière de la différence est le nombre de jours complets et la partie décimale représente un jour partiel.
Le JULIANDAY()
La fonction renvoie le nombre de jours écoulés depuis midi, heure moyenne de Greenwich, le 24 novembre 4714 av. Vous pouvez en savoir plus sur cette fonction dans la documentation.
Solution 2 (différence en secondes) :
SELECT id, departure, arrival, ROUND((JULIANDAY(arrival) - JULIANDAY(departure)) * 86400) AS difference FROM travel;
Le résultat est :
identifiant | départ | arrivée | différence |
---|---|---|---|
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 |
Discussion :
Si vous souhaitez calculer la différence entre les horodatages en secondes, multipliez la différence décimale en jours par le nombre de secondes dans une journée, ce qui équivaut à 24 * 60 * 60 = 86400
, soit le produit du nombre d'heures d'une journée, du nombre de minutes d'une heure et du nombre de secondes d'une minute. Étant donné que les parties décimales de la différence en jours ne sont pas exactes à 100 % en raison d'erreurs d'arrondi, vous pouvez obtenir une partie décimale non nulle. Arrondir le résultat à l'entier le plus proche, en utilisant le ROUND()
fonction, résout le problème.
De même, vous pouvez calculer la différence en minutes ou en heures. Changez simplement * 86400 to * 3600
(minutes) ou * 60
(heures).