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

Comment calculer la différence entre deux horodatages dans PostgreSQL

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, heures, minutes et secondes) :

SELECT
  id,
  departure,
  arrival,
  arrival - 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 jours 19:30:00
2 2019-09-12 15:50:00 2019-10-23 10:30:30 40 jours 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 jours 05:25:00

Discussion :

Pour calculer la différence entre les horodatages dans PostgreSQL, soustrayez simplement l'horodatage de début de l'horodatage de fin. Ici, ce serait arrival - departure . La différence sera du type interval , ce qui signifie que vous le verrez en jours, heures, minutes et secondes.

Solution 2 (différence en années, mois, jours, heures, minutes et secondes) :

SELECT
  id,
  departure,
  arrival,
  AGE(arrival, 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 jours 19:30:00
2 2019-09-12 15:50:00 2019-10-23 10:30:30 1 mois 10 jours 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 an 3 jours 05:25:00

Discussion :

Si vous souhaitez obtenir la différence en années, mois, jours, heures, minutes et secondes, utilisez le AGE(end, start) une fonction. Ici, ce serait AGE(arrival, departure) . Dans cette solution, la colonne résultante est également de type interval .

Solution 3 (différence en secondes) :

SELECT
  id,
  departure,
  arrival,
  EXTRACT(EPOCH FROM (arrival - departure)) AS difference
FROM travel;
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 dans PostgreSQL, soustrayez une date de l'autre (ici :arrival - departure ) puis extrayez EPOCH de la différence pour l'obtenir en quelques secondes. En savoir plus sur EXTRACT() fonction.


No