Ich versuche, den Zeitunterschied aus meiner Tabelle abzurufen und in Stunden umzuwandeln (es handelt sich um einen stündlich abgerechneten Dienst).
SELECT TIME_TO_SEC(TIMEDIFF(endDate,startDate))/3600 FROM Aufgaben >
wobei endDate und startDate im datetime-Format vorliegen
Gibt es eine andere (effizientere) Möglichkeit, diese Aufgabe zu erledigen? Vielen Dank !
Mögliches Duplikat.
– Kermit
31. August 2012 um 21:58 Uhr
Ich denke, jeder hat hier einen sehr wichtigen Punkt verpasst – weil es kein Technikfreak ist. Dinge, die nach Stunden abgerechnet werden, werden normalerweise nach Stunden abgerechnet gestartetnicht abgeschlossen. Also müssen alle diese Antworten wahrscheinlich aufgerundet werden. B. 1 Stunde 1 Minute == 2 Stunden gebührenpflichtig (genauso wie das Bezahlen für das Parken Ihres Autos usw.)
– Mawg sagt, Monica wieder einzusetzen
1. März 2013 um 2:53 Uhr
Trav L
TIMEDIFF(endDate, startDate) gibt im DateTime-Format aus, so flach, dass Zeitstempel und Division durch (60 * 60) möglich sind
SELECT (UNIX_TIMESTAMP(TIMEDIFF(endDate, startDate))/(60*60)) AS hours_difference
FROM tasks
Bearbeiten: Alternative,ZeitstempelDiff kann auch auf elegantere Weise eine gültige Lösung bieten, wenn man sein Beispiel angibt:
Seltsamerweise gibt UNIX_TIMESTAMP 0 und TimeStampDiff NULL für alle Werte in MySQL-Version ~5.0 (sehr veraltet) zurück. Der Ansatz von OP hat in diesem Fall funktioniert.
– HoldOffHunger
28. Juli 2016 um 18:26 Uhr
Beachten Sie, dass TIMEDIFF und TIMESTAMPDIFF Berücksichtigen Sie keine Änderungen der Sommerzeit. Die Antwort von @Donny Kurnia unten funktioniert am besten, wenn die gewonnene / verlorene Stunde in Ihrem Fall von Bedeutung ist.
– Roger Dueck
11. April 2017 um 14:12 Uhr
Funk Doc
HINWEIS: Die am häufigsten gewählte Antwort in dieser Kette ist FALSCH! Die Verwendung von HOUR gibt Stunden nur als ganze Zahl zurück. Unten wird die beliebteste Antwort korrigiert, um Stunden als Ganzzahl und Minuten als Dezimalzahl zurückzugeben (dh 6,5 Stunden).
TIME_TO_SEC(TIMEDIFF(endDate, startDate))/3600 as hours
In diesem Fall, wie OP sagt “es ist für einen stündlich abgerechneten Dienst”, stelle ich mir vor, dass Sie jeden Bruchteil auf die nächste ganze Stunde aufrunden möchten. Also, ja, der andere Typ könnte falsch liegen, weil er eine INTEGER zurückgibt, aber es hört sich so an, als ob OP eine ganze Zahl will aufgerundet
– Mawg sagt, Monica wieder einzusetzen
1. März 2013 um 2:49 Uhr
Semantik, “stündliche” Arbeit, die auf die halbe Stunde oder einen anderen Bruchteil abgerechnet wird, ist keine ungewöhnliche Sache. Warum nicht alle Basen auf einmal abdecken?
– Funk Doc
11. Dezember 2021 um 23:23 Uhr
HOUR(TIMEDIFF(endDate, startDate))
könnte funktionieren – wenn ich die Dokumentation richtig lese.
Vergessen Sie nicht, dass diese Funktion rundet
– Filip Kovac
16. Januar 2018 um 14:12 Uhr
Sie können verwenden UNIX_TIMESTAMP um die Berechnung in der SELECT-Abfrage durchzuführen.
SELECT (UNIX_TIMESTAMP(endDate)-UNIX_TIMESTAMP(startDate))/3600 hour_diff
FROM tasks
UNIX_TIMESTAMP Konvertieren Sie datetime in die Anzahl der Sekunden aus der Epoche. Sie können beide Zeitstempel subtrahieren, um den Unterschied in Sekunden zu erhalten. Teilen Sie es durch 3600, um die Stundendifferenz zu erhalten.
Ralf Strehle
TIMESTAMPDIFF(HOUR, startDate, endDate)
ist der beste Weg, es zu tun, weil es mit großen Zeitintervallen funktioniert, wie z
Wie wir im obigen Beispiel sehen, funktioniert es überraschenderweise sogar über die Zeitstempelbegrenzung im Jahr 2038 hinaus.
Die maximalen Stunden, die von zurückgegeben werden HOUR(TIMEDIFF(dateEnd, dateStart)) ist 838, weil TIMEDIFF ist auf den zulässigen Bereich beschränkt TIME Werte.
SELECT (UNIX_TIMESTAMP(dateFin)-UNIX_TIMESTAMP(dateDebut))/3600 hour_diff
FROM tasks
SELECT TIME_TO_SEC(TIMEDIFF(endDate,startDate))/3600
FROM tasks
gibt 19,4061 zurück, was gut ist
SELECT TIMESTAMPDIFF(HOUR, endDate, startDate) AS hours_different
FROM tasks
Gibt nur Stunden zurück, während ich auch Minuten zum Umrechnen benötige.
SELECT (UNIX_TIMESTAMP(TIMEDIFF(endDate, startDate))/(60*60)) AS hours_difference
FROM tasks
gibt 0 zurück. Ich denke, der erste ist der effizienteste. Vielen Dank !!
Sie sollten eine der Antworten als akzeptiert auswählen, anstatt Antworten wie diese zu erstellen. Verwenden Sie auch Kommentare in den entsprechenden Antworten, anstatt sie umzuschreiben oder neu zu zitieren.
– Donny Kurnia
2. Februar 2010 um 5:14 Uhr
SELECT TIME_TO_SEC(TIMEDIFF(endDate,startDate))/3600 FROM Aufgaben ist gut
Mögliches Duplikat.
– Kermit
31. August 2012 um 21:58 Uhr
Ich denke, jeder hat hier einen sehr wichtigen Punkt verpasst – weil es kein Technikfreak ist. Dinge, die nach Stunden abgerechnet werden, werden normalerweise nach Stunden abgerechnet gestartetnicht abgeschlossen. Also müssen alle diese Antworten wahrscheinlich aufgerundet werden. B. 1 Stunde 1 Minute == 2 Stunden gebührenpflichtig (genauso wie das Bezahlen für das Parken Ihres Autos usw.)
– Mawg sagt, Monica wieder einzusetzen
1. März 2013 um 2:53 Uhr