Comment Calculer La Différence Entre Deux Dates SQL Server ?

Quatre solutions différentes en T-SQL pour calculer la différence entre deux heures SQL Server avec les heures, les minutes et les secondes.

Comment calculer la différence entre deux dates et haures avec SQL Server, soit une date de début et une date de fin et afficher le nombre d’heures, de minutes et de secondes, voire de millisecondes ? Il existe pour cela plusieurs solutions. En effet, la fonction SQL Server DATEDIFF() permet par exemple de calculer les différences dans l’unité de temps voulue. Il faut toutefois combiner ou concaténer plusieurs requêtes pour arriver à obtenir les heures, minutes et les secondes dans une seule opération SQL. Voici donc 4 solutions différentes toutes écrites en code Transact-SQL.

1. Calculer la différence en secondes minutes et heures en T-SQL

Tout d’abord, à titre d’exemple, ces 3 requêtes SQL Server simples utilisent les fonctions DATEDIFF. Et les deux horodatages stockés dans les variables ont exactement une heure de différence. Cependant, chaque requête ne renvoie qu’une unité, ce qui n’est pas suffisant pour notre objectif. Pour obtenir le résultat complet en heures, minutes et secondes, nous devons concaténer plusieurs requêtes ensemble. En effet, les requêtes ci-dessous affichent 3 unités de temps spécifiques différentes comme résultats.

  1. Calculer d’abord la différence en secondes
  2. Puis en minutes
  3. Et enfin en heures
DECLARE @DateDebut	DATETIME
DECLARE @DateFin	DATETIME

SET	@DateDebut	= '2017-03-10 08:00:00'
SET	@DateFin	= '2017-03-10 09:00:00'

-- Requête SQL Server pour la différence entre deux dates en SECONDES : 3600
SELECT DATEDIFF(SECOND, @DateDebut, @DateFin) AS [Durée en Secondes]

-- Requête SQL Server pour la différence de dates en MINUTES : 60
SELECT DATEDIFF(MINUTE, @DateDebut, @DateFin) AS [Durée en Minutes]

-- Requête SQL Server pour la différence de dates en HEURES : 1
SELECT DATEDIFF(HOUR, @DateDebut, @DateFin) AS [Durée en Heures]

Ou dans un format plus concis, en utilisant seulement 3 lignes de code, mais en calculant uniquement la différence en heures :

-- Déclarer et initialiser deux variables avec exactement une heure de différence : 9 - 8 = 1h
DECLARE @DateStart DATETIME = '2022-03-10 08:00:00',
        @DateEnd   DATETIME = '2022-03-10 09:00:00';

-- SQL Query returns difference in hours : 1 hour
SELECT DATEDIFF(HOUR, @DateStart, @DateEnd) AS [Difference in Hours];
Calculer la différence entre deux dates SQL Server en heures minutes et secondes
Calculer la différence entre deux dates SQL Server en heures minutes et secondes

2. Calculer la différence entre deux dates en une requête T-SQL

Dans cette deuxième méthode, pour obtenir la différence de temps en heures, minutes et secondes, utilisez cette requête avec CAST et l’opérateur mathématique Modulo. Cependant, cette méthode ne fonctionne que si le nombre d’heures est inférieur à 99. De plus, la requête convertit le total en secondes en Heures, Minutes et Secondes, par exemple avec 3 heures = 3600 * 3 = 14400 secondes.

Par ailleurs, merci au blog SQLAuthority pour le code de cette deuxième solution.

DECLARE @TempsEnSecondes INT
-- Changer les secondes sur la ligne ci-dessous : exemple avec 1400 = 3600 * 3 soit 3 heures

SET @TempsEnSecondes = 14400

SELECT
RIGHT('0' + CAST(@TempsEnSecondes / 3600 AS VARCHAR),2) + ':' +
RIGHT('0' + CAST((@TempsEnSecondes / 60) % 60 AS VARCHAR),2) + ':' +
RIGHT('0' + CAST(@TempsEnSecondes % 60 AS VARCHAR),2) AS  [Heures Minutes Secondes]

3. Afficher la différence entre deux dates sans les millisecondes

Cette requête utilise d’abord la fonction DATEADD pour additionner 3 heures en secondes à zéro. Elle retourne ainsi les heures, les minutes et les secondes. La fonction CONVERT renvoi le résultat au format date, sans les millisecondes. C’est à dire : 03:00:00.

-- Utilisation des secondes comme base de conversion
select CONVERT(varchar, dateadd(s, 3 * 3600 , getdate()), 108) AS [Heures Minutes Secondes]

-- Utilisation des millisecondes comme base de conversion
select CONVERT(varchar, dateadd(ms, 3 * 3600 * 1000, getdate()), 108) AS [Heures Minutes Secondes]

4. Obtenir la différence entre deux heures avec DATEPART

Une autre solution pour calculer la différence en minutes et secondes est d’utiliser la fonction T-SQL DATEPART. Cette fonction MS SQL intégrée est conçue pour extraire une partie spécifique du format de la date.

Quatre façons différentes de calculer les différences de temps en utilisant SQL Server

Dans ce tutoriel, nous avons discuté de 4 façons différentes de calculer la différence entre deux dates et heures SQL Server avec du code T-SQL. En utilisant les fonctions de temps intégrées au SGBD, vous pouvez facilement déterminer la différence en heures, minutes et secondes, voire millisecondes. Pour optimiser la solution que vous avez choisie, nous vous suggérons de combiner plusieurs fonctions. Pour plus d’informations sur la fonction de temps SQL Server DATEADD(), se référer à la documentation officielle de Microsoft.

Questions fréquentes sur le calcul des dates avec SQL Server

Comment calculer la différence entre deux dates SQL en heures ?

Pour calculer une différence de temps entre deux dates en heures, prenez les deux dates et heures et faites la différence en utilisant l’option HOUR combinée avec la fonction de temps DATEDIFF :
« SELECT DATEDIFF(HOUR, @DateStart, @DateEnd) AS [Différence en heures] ».

Comment calculer la différence entre 2 dates SQL Server en minutes ?

Pour calculer une différence de temps entre deux dates en minutes, utilisez les deux dates et heures et calculez la différence avec l’option MINUTE de la fonction SQL DATEDIFF :
« SELECT DATEDIFF(MINUTE, @DateStart, @DateEnd) AS [Différence en minutes] ».

Comment calculer la différence entre des dates en secondes ?

Pour calculer la différence de temps exacte entre deux dates à la seconde près, faites la différence et utilisez l’option SECOND :
« SELECT DATEDIFF(SECOND, @DateStart, @DateEnd) AS [Différence en secondes] ».

Comment calculer une différence entre des horodatages en millisecondes ?

Pour calculer précisément la différence de temps en millisecondes, utilisez la fonction de temps intégrée à T-SQL et le mot-clé MILLISECOND :
« SELECT DATEDIFF(MILLISECOND, @DateStart, @DateEnd) AS [Différence en millisecondes] »

Pour aller plus loin avec les requêtes T-SQL

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *