Différence entre deux dates en heures minutes et secondes

Comment calculer la différence entre deux dates avec une requête SQL ? C’est à dire une date de début et une date de fin en affichant le nombre d’heures, de minutes et de secondes? En effet, 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.

3 solutions pour calculer la différence entre 2 dates en heures, minutes et secondes avec SQL Server? 

Tout d’abord, déclarer 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'

Première solution, trois 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, sans afficher 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 la différence de dates en heures minutes et secondes, cette fois sans les millisecondes.

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

Cet article expose 3 exemples de codes pour afficher les différence avec un format différent. Pour aller plus loin cet requête permet d’afficher la dernière date de modification d’une table SQL Server.

Source du code pour la deuxième solution est ici sur SQLAuthority.

Soyez le premier à commenter

Laisser un commentaire