SQL Calculer les heures pendant la nuit avec la date statique

J'écris des requêtes sur un système installé par quelqu'un d'autre, donc les tables ne peuvent pas être changées ici.

problème: J'ai une table où j'ai Date, timeIN et timeOUT prennent les loggings suivants;

date | timeIN | timerOUT ------------------------------------------------- 2016-01-01 00:00:00.00 | 2000-01-01 07:00 | 2000-01-01 15:00 DATEDIFF = 8H 2016-01-02 00:00:00.00 | 2000-01-01 07:00 | 2000-01-01 15:00 DATEDIFF = 8H 2016-01-05 00:00:00.00 | 2000-01-01 23:00 | 2000-01-01 07:00 DATEDIFF = -16H 

Comment puis-je get DATEDIFF = 8H de l'logging numéro 3? Le problème ici est que tous les tampons timeIN et timeOUT ont la même date fictive.

Vous pouvez utiliser l'expression CASE dans la fonction DATEDIFF :

 SELECT Diff = DATEDIFF( HOUR, timeIn, CASE WHEN timeOut < timeIn THEN DATEADD(DAY, 1, timeOut) ELSE timeOut END ) FROM tbl 

Cela appenda un jour à l'heure, mais si c'est less que le time.