J'ai une table appelée dbo.employees, j'exécute quelques requêtes et j'obtiens le résultat ci-dessous.

empId | timeIn   | timeOut  | timeDiff
------+----------+----------+------------
1001  | 03:49:54 | 15:43:42 | 
1017  | 06:27:10 | 13:47:40 | 
1005  | 05:49:50 | 13:42:03 | 

J'aimerais exécuter une requête supplémentaire pour calculer le timeDiff afin qu'il se présente comme ci-dessous. Je pense que la fonction TIMEDIFF pourrait faire cela? J'aimerais le calculer en heures/minutes si possible.

empId | timeIn   | timeOut  | timeDiff
------+----------+----------+------------
1001  | 03:49:54 | 15:43:42 | 11hr, 53min
1017  | 06:27:10 | 13:47:40 | 8hr, 20min
1005  | 05:49:50 | 13:42:03 | 7hr, 52min

Merci beaucoup d'avance.

0
Joshua Hateley 4 nov. 2020 à 00:38

1 réponse

Meilleure réponse

Voici une option utilisant datediff() dans une jointure latérale et des calculs :

select e.*, concat(d.diff / 60, 'hr, ', d.diff % 60, 'min') timediff
from dbo.employee e
cross apply (values (datediff(minute, e.timein, e.timeout))) d(diff)

Fondamentalement, la jointure latérale calcule la différence entre les deux temps en minutes. Ensuite, la requête externe crée la chaîne qui représente cet intervalle en heures et minutes.

0
GMB 3 nov. 2020 à 21:44