SQLite
 sql >> Base de données >  >> RDS >> SQLite

Comment calculer la différence entre deux horodatages dans SQLite

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