Calculer la différence entre dates SQL Server en heures minutes et secondes




Comment calculer la différence entre deux dates, c’est à dire une date de début et une date de fin en affichant le nombre d’heures, de minutes et de secondes sous SQL Server? La fonction DATEDIFF() de SQL Server permet de calculer les différences dans l’unité de temps voulue, par exemple en secondes, minutes et heures avec deux dates ayant exactement 1 heure de différence. 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.

 

On déclare deux variables avec exactement une heure de différence

DECLARE @DateDebut	DATETIME
DECLARE @DateFin	DATETIME

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

 

Calculer la différence de dates en heures, minutes et secondes avec SQL Server

 

Première solution: voici 3 requêtes pour obtenir les secondes, les minutes et les heures de manière séparée.

-- 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]

 

Une deuxième façon de faire, si on ne veux pas avoir les heures si elles dépassent le nombre 99 :

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]

 

Une troisième solution pour transformer les secondes en heures minutes et secondes sous SQL Server, cette fois sans les millisecondes :

SELECT CONVERT(varchar, DATEADD(ms, 14400 * 1000, 0), 108) AS [Heures Minutes Secondes]