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.