mysql timediff zu Stunden

Lesezeit: 4 Minuten

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

Benutzeravatar von Trav L
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:

SELECT TIMESTAMPDIFF(MONTH,'2003-02-01','2003-05-01');

Und Ihre Lösung kann sein:

SELECT TIMESTAMPDIFF(HOUR, startDate, endDate) AS hours_different
FROM tasks

  • Richtige Parameter TIMESTAMPDIFF(HOUR, startDate, endDate)

    – Gathole

    25. April 2016 um 9:56 Uhr

  • 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


Benutzeravatar von Funk Doc
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.

Benutzeravatar von Ralf Strehle
Ralf Strehle

TIMESTAMPDIFF(HOUR, startDate, endDate)

ist der beste Weg, es zu tun, weil es mit großen Zeitintervallen funktioniert, wie z

TIMESTAMPDIFF(HOUR, "2012-01-01 00:00:00", "2050-01-01 00:00:00")

Ergebnis: 333120

während

HOUR(TIMEDIFF("2050-01-01 00:00:00", "2012-01-01 00:00:00"))

Ergebnis: 838

scheitert.

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.

Benutzeravatar von Rikhi Sahu
Rikhi Sahu

um die Differenz in der Stunde zu erhalten:

Hour(TIMEDIFF(date1,date2)) as Hour1

um den Unterschied in Minute zu erhalten:

Minute(TIMEDIFF(date1,date2)) as Minute1

um den Unterschied in Sekunde zu erhalten:

Second(TIMEDIFF(date1,date2)) as Second1

Benutzeravatar von fthiella
fthiella

zB: startDate 2010-01-31 00:00:00, endDate 2010-01-31 19:24:22

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

    – Trondozer

    9. Juli 2015 um 16:07 Uhr

1428990cookie-checkmysql timediff zu Stunden

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy