2017-05-17 1 views
0

Ich habe die folgende Abfrage:mysql eine falsche TIMEDIFF gibt aus 20 rechts

SELECT `Time`, 
    `Resolution`, 
    HOUR(TIMEDIFF(`Resolution`,`Time`)), 
    TIMEDIFF(`Resolution`,`Time`), 
    datediff(`Resolution`,`Time`) 
FROM Cases; 

Um zu debuggen, füge ich die TIMEDIFF ohne die Stunde vor, nur um zu sehen, ob das Ergebnis anders ist. Ich benutze datediff, um zu überprüfen.

Das Ergebnis der Abfrage ist:

+---------------------+---------------------+-------------------------------------+-------------------------------+-------------------------------+ 
| Time    | Resolution   | HOUR(TIMEDIFF(`Resolution`,`Time`)) | TIMEDIFF(`Resolution`,`Time`) | datediff(`Resolution`,`Time`) | 
+---------------------+---------------------+-------------------------------------+-------------------------------+-------------------------------+ 
| 2017-01-10 13:35:00 | 2017-01-24 10:52:00 |         333 | 333:17:00      |       14 | 
| 2017-01-12 15:53:00 | 2017-02-21 16:06:00 |         838 | 838:59:59      |       40 | 
| 2017-01-18 09:19:00 | 2017-01-18 13:39:00 |         4 | 04:20:00      |        0 | 
| 2017-01-23 09:00:00 | 2017-01-23 15:08:00 |         6 | 06:08:00      |        0 | 
| 2017-01-24 08:49:00 | 2017-02-20 14:34:00 |         653 | 653:45:00      |       27 | 

Eigentlich ist es mehr Linien, aber die entsprechende Zeile ist das 2 Ergebnis liefert - 838 Stunden, die auf 34,91 Tage übersetzt, lassen Sie uns 35 sagen, aber die DATEDIFF Geben Sie 40 und wenn Sie die Berechnung selbst machen, sind es 40 Tage! 12. Januar bis 21. Februar

Alle anderen 21 Ergebnisse sind korrekt.

Irgendeine Idee warum? Ein Fehler in MySQL? Alle Antworten werden sehr geschätzt.

Antwort

2

Verwenden

TIMESTAMPDIFF(HOUR,`Time`, `Resolution`) 

statt.

Es negiert auch die Notwendigkeit, HOUR() zu verwenden.

https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_timestampdiff

Die durch TIMEDIFF() zurückgegebene Ergebnis wird an den für TIME Werte erlaubten Bereich begrenzt. https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_timediff

TIME Werte können von -838:59:59 bis 838:59:59 reichen. https://dev.mysql.com/doc/refman/5.5/en/time.html

So erhalten Sie den maximal möglichen Wert.

+0

Vielen Dank. Das hat geholfen. – Slarti42

+0

Wenn dies Ihr Problem gelöst hat, bitte akzeptieren Sie meine Antwort, indem Sie auf das Häkchen :) – inarilo

+0

getan, danke nochmal. – Slarti42

Verwandte Themen