Zeitberechung in mySQL4.1 falsch??
Zeitberechung in mySQL4.1 falsch??
am 27.04.2005 17:05:33 von Goldfisch1980
Ich habe eine Tabelle "Fahrtstrecken" mit 2 TIME Feldern: "von" und "bis".
Diese beinhalten z.B die Werte für eine StreckeA, die sich aus 2
Abschnitten: "StreckeA1" und "StreckeA2" ergibt (das könnten aber
theoretisch auch mehrere Abschnitte sein!):
StreckeA
StreckeA1
von: 15:00:00
bis: 15:10:00
StreckeA2
von: 15:15:00
bis: 15:20:00
Das heisst, Fahrt für StreckeA geht um 15h los und um 15:20 zuende.
Der SQL Query wäre dann:
SELECT MIN( von ) AS Abfahrtszeit,
MAX( bis ) AS Ankunftszeit,
MAX( von ) - MIN( bis ) AS Dauer
FROM Fahrtstrecken
Dieser liefert mir nun den kleinsten Zeitpunkt und den grössten
Zeitpunkt und die Dauer, die sich aus der Subtraktion aus Ankunftszeit
und Abfahrtszeit ergibt! Soweit klappt das ja auch wunderbar - bei
Stunden zumindest!!
Aber wenn es sich wie im obigen Beispiel nur um Minuten handelt, bekomme
ich von mySQL in der künstlichen Spalte "Dauer" immer nur 0 zurück, da
das Ergebnis irgenwie abgerundet wird! Richtig wäre aber der Wert 0,3
(für 20 Minuten Fahrtdauer).
Weiss jemand, wie ich das Problem lösen kann?
Muss ich das erst in Minuten umrechnen, um 2 TIME Felder voneinander
abziehen zu können? Sollte ich evtl. vielleicht ein anderen Feldtyp
nehmen, statt TIME? (ich berücksichtige derzeit auch nicht, wenn die
Ankunft am nächsten Tag erst wäre! evtl. sinnvoll da eh auf DATETIME
umzusteigen?)
wäre sehr dankbar für Tips!
-Phil
Re: Zeitberechung in mySQL4.1 falsch??
am 27.04.2005 17:33:53 von Hartmut Holzgraefe
Philliph Mau wrote:
> Ich habe eine Tabelle "Fahrtstrecken" mit 2 TIME Feldern: "von" und "bi=
s".
> Diese beinhalten z.B die Werte für eine StreckeA, die sich aus 2=20
> Abschnitten: "StreckeA1" und "StreckeA2" ergibt (das könnten aber=20
> theoretisch auch mehrere Abschnitte sein!):
>=20
> StreckeA
> StreckeA1
> von: 15:00:00
> bis: 15:10:00
> StreckeA2
> von: 15:15:00
> bis: 15:20:00
>=20
>=20
> Das heisst, Fahrt für StreckeA geht um 15h los und um 15:20 zuende.
>=20
>=20
> Der SQL Query wäre dann:
>=20
> SELECT MIN( von ) AS Abfahrtszeit,
> MAX( bis ) AS Ankunftszeit,
> MAX( von ) - MIN( bis ) AS Dauer
> FROM Fahrtstrecken
>=20
> Dieser liefert mir nun den kleinsten Zeitpunkt und den grössten=20
> Zeitpunkt und die Dauer, die sich aus der Subtraktion aus Ankunftszeit =
> und Abfahrtszeit ergibt! Soweit klappt das ja auch wunderbar - bei=20
> Stunden zumindest!!
> Aber wenn es sich wie im obigen Beispiel nur um Minuten handelt, bekomm=
e=20
> ich von mySQL in der künstlichen Spalte "Dauer" immer nur 0 zurück,=
da=20
> das Ergebnis irgenwie abgerundet wird! Richtig wäre aber der Wert 0,3=
=20
> (für 20 Minuten Fahrtdauer).
bei einem einfachen Minus werden die Werte zunächst in Strings und dann=
in Integer konvertiert, da ist dann nach dem ersten : schluss
> Weiss jemand, wie ich das Problem lösen kann?
> Muss ich das erst in Minuten umrechnen, um 2 TIME Felder voneinander=20
> abziehen zu können? Sollte ich evtl. vielleicht ein anderen Feldtyp=20
> nehmen, statt TIME? (ich berücksichtige derzeit auch nicht, wenn die =
> Ankunft am nächsten Tag erst wäre! evtl. sinnvoll da eh auf DATETIM=
E=20
> umzusteigen?)
Siehe
http://dev.mysql.com/doc/mysql/en/date-and-time-functions.ht ml
insbesondere TIMEDIFF()
--=20
Hartmut Holzgraefe, Senior Support Engineer .
MySQL AB, www.mysql.com
Re: Zeitberechung in mySQL4.1 falsch??
am 27.04.2005 17:45:06 von Goldfisch1980
Hartmut Holzgraefe schrieb:
> Philliph Mau wrote:
>
>> Ich habe eine Tabelle "Fahrtstrecken" mit 2 TIME Feldern: "von" und
>> "bis".
>> Diese beinhalten z.B die Werte für eine StreckeA, die sich aus 2
>> Abschnitten: "StreckeA1" und "StreckeA2" ergibt (das könnten aber
>> theoretisch auch mehrere Abschnitte sein!):
>>
>> StreckeA
>> StreckeA1
>> von: 15:00:00
>> bis: 15:10:00
>> StreckeA2
>> von: 15:15:00
>> bis: 15:20:00
>>
>>
>> Das heisst, Fahrt für StreckeA geht um 15h los und um 15:20 zuende.
>>
>>
>> Der SQL Query wäre dann:
>>
>> SELECT MIN( von ) AS Abfahrtszeit,
>> MAX( bis ) AS Ankunftszeit,
>> MAX( von ) - MIN( bis ) AS Dauer
>> FROM Fahrtstrecken
>>
>> Dieser liefert mir nun den kleinsten Zeitpunkt und den grössten
>> Zeitpunkt und die Dauer, die sich aus der Subtraktion aus Ankunftszeit
>> und Abfahrtszeit ergibt! Soweit klappt das ja auch wunderbar - bei
>> Stunden zumindest!!
>> Aber wenn es sich wie im obigen Beispiel nur um Minuten handelt,
>> bekomme ich von mySQL in der künstlichen Spalte "Dauer" immer nur 0
>> zurück, da das Ergebnis irgenwie abgerundet wird! Richtig wäre aber
>> der Wert 0,3 (für 20 Minuten Fahrtdauer).
>
>
> bei einem einfachen Minus werden die Werte zunächst in Strings und dann
> in Integer konvertiert, da ist dann nach dem ersten : schluss
>
>> Weiss jemand, wie ich das Problem lösen kann?
>> Muss ich das erst in Minuten umrechnen, um 2 TIME Felder voneinander
>> abziehen zu können? Sollte ich evtl. vielleicht ein anderen Feldtyp
>> nehmen, statt TIME? (ich berücksichtige derzeit auch nicht, wenn die
>> Ankunft am nächsten Tag erst wäre! evtl. sinnvoll da eh auf DATETIME
>> umzusteigen?)
>
>
> Siehe
>
> http://dev.mysql.com/doc/mysql/en/date-and-time-functions.ht ml
>
> insbesondere TIMEDIFF()
>
>
>
Sorry, das verstehe ich nicht ganz. Zumal mein Englisch nich wirklich
gut ist :-(
Kannst du mir einen tip geben, wie ich das SQL technisch einbaue?
Re: Zeitberechung in mySQL4.1 falsch??
am 27.04.2005 18:21:42 von Joerg Behrens
"Philliph Mau" schrieb im Newsbeitrag
news:426fb381$0$10504$9b4e6d93@newsread4.arcor-online.net...
> Hartmut Holzgraefe schrieb:
>
>> Philliph Mau wrote:
>>
>>> Ich habe eine Tabelle "Fahrtstrecken" mit 2 TIME Feldern: "von"
>>> und "bis".
>>> Diese beinhalten z.B die Werte für eine StreckeA, die sich aus 2
>>> Abschnitten: "StreckeA1" und "StreckeA2" ergibt (das könnten aber
>>> theoretisch auch mehrere Abschnitte sein!):
>>>
>>> StreckeA
>>> StreckeA1
>>> von: 15:00:00
>>> bis: 15:10:00
>>> StreckeA2
>>> von: 15:15:00
>>> bis: 15:20:00
>>>
>>>
>>> Das heisst, Fahrt für StreckeA geht um 15h los und um 15:20
>>> zuende.
>>>
>>>
>>> Der SQL Query wäre dann:
>>>
>>> SELECT MIN( von ) AS Abfahrtszeit,
>>> MAX( bis ) AS Ankunftszeit,
>>> MAX( von ) - MIN( bis ) AS Dauer
>>> FROM Fahrtstrecken
>>>
>>> Dieser liefert mir nun den kleinsten Zeitpunkt und den grössten
>>> Zeitpunkt und die Dauer, die sich aus der Subtraktion aus
>>> Ankunftszeit und Abfahrtszeit ergibt! Soweit klappt das ja auch
>>> wunderbar - bei Stunden zumindest!!
>>> Aber wenn es sich wie im obigen Beispiel nur um Minuten handelt,
>>> bekomme ich von mySQL in der künstlichen Spalte "Dauer" immer nur
>>> 0 zurück, da das Ergebnis irgenwie abgerundet wird! Richtig wäre
>>> aber der Wert 0,3 (für 20 Minuten Fahrtdauer).
>>
>>
>> bei einem einfachen Minus werden die Werte zunächst in Strings und
>> dann
>> in Integer konvertiert, da ist dann nach dem ersten : schluss
>>
>>> Weiss jemand, wie ich das Problem lösen kann?
>>> Muss ich das erst in Minuten umrechnen, um 2 TIME Felder
>>> voneinander abziehen zu können? Sollte ich evtl. vielleicht ein
>>> anderen Feldtyp nehmen, statt TIME? (ich berücksichtige derzeit
>>> auch nicht, wenn die Ankunft am nächsten Tag erst wäre! evtl.
>>> sinnvoll da eh auf DATETIME umzusteigen?)
>>
>>
>> Siehe
>>
>> http://dev.mysql.com/doc/mysql/en/date-and-time-functions.ht ml
>>
>> insbesondere TIMEDIFF()
>>
>>
>>
>
> Sorry, das verstehe ich nicht ganz. Zumal mein Englisch nich
> wirklich gut ist :-(
1. Lern englisch
2. Gucke in das deutsche Manual
http://dev.mysql.com/doc/mysql/de/date-and-time-functions.ht ml (wieso
sind da keine min. Versionsangaben drin?) aber denke dran das es
unvollstaendig ist
3. Meinst du nicht das eine (my)SQL Gruppe besser zur Frage passt?
4. Ja du willst einen anderen Typ nehmen welcher auch Tage, Monate und
Jahre mit aufzeichnet
> Kannst du mir einen tip geben, wie ich das SQL technisch einbaue?
Die Beispiele da kann man auch ohne Englischkenntnisse verstehen
(sofern man SQL kann)
select timediff(anfahrt, ankunft) as fahrzeit from tabelle
Gruss
Joerg
--
TakeNet GmbH Mobil: 0171/60 57 963
D-97080 Wuerzburg Tel: +49 931 903-2243
Alfred-Nobel-Straße 20 Fax: +49 931 903-3025
Re: Zeitberechung in mySQL4.1 falsch??
am 27.04.2005 18:22:37 von Marian Heddesheimer
On Wed, 27 Apr 2005 17:45:06 +0200, Philliph Mau wrote:
>Sorry, das verstehe ich nicht ganz. Zumal mein Englisch nich wirklich
>gut ist :-(
>Kannst du mir einen tip geben, wie ich das SQL technisch einbaue?
da du nicht angegeben hast, welche MySQL Version du verwendest, gehe
ich hier mal vom schlimmsten Fall (3.23 oder so) aus:
select *, unix_timestamp(ankunft) - unix_timestamp(abfahrt) from test
wobei ankunft und abfahrt beide vom Type DATETIME sind. Durch
unix_timestamp werden die Daten in Sekunden umgewandelt. Als Differenz
bekommst du also die Zeitdifferenz in Sekunden. Die musst du eventuell
noch in Stunden:Minuten:Sekunden umrechnen.
Wenn Du MySQL ab Version 4.1.1 verwendest könntest du die Funktion
TIMEDIFF(ankunft, abfahrt) verwenden. Die liefert dann direkt ein
schon formatiertes Format "Std:Min:Sekunde".
Marian
--
Online Lernen (auch fuer Blinde geeignet): HTML, PHP, MySQL, Word
http://www.lernpilot.de/wbt/
Re: Zeitberechung in mySQL4.1 falsch??
am 27.04.2005 23:06:27 von Goldfisch1980
Marian Heddesheimer schrieb:
> On Wed, 27 Apr 2005 17:45:06 +0200, Philliph Mau wrote:
>
>
>>Sorry, das verstehe ich nicht ganz. Zumal mein Englisch nich wirklich
>>gut ist :-(
>>Kannst du mir einen tip geben, wie ich das SQL technisch einbaue?
>
>
> da du nicht angegeben hast, welche MySQL Version du verwendest, gehe
> ich hier mal vom schlimmsten Fall (3.23 oder so) aus:
>
> select *, unix_timestamp(ankunft) - unix_timestamp(abfahrt) from test
>
> wobei ankunft und abfahrt beide vom Type DATETIME sind. Durch
> unix_timestamp werden die Daten in Sekunden umgewandelt. Als Differenz
> bekommst du also die Zeitdifferenz in Sekunden. Die musst du eventuell
> noch in Stunden:Minuten:Sekunden umrechnen.
>
> Wenn Du MySQL ab Version 4.1.1 verwendest könntest du die Funktion
> TIMEDIFF(ankunft, abfahrt) verwenden. Die liefert dann direkt ein
> schon formatiertes Format "Std:Min:Sekunde".
>
> Marian
>
>
Danke, das war der einzige konstruktive Beitrag hier, Marian :)
Hat mir geholfen!!
danke!
-phil
Re: Zeitberechung in mySQL4.1 falsch??
am 27.04.2005 23:45:56 von Hartmut Holzgraefe
Philliph Mau wrote:
> Danke, das war der einzige konstruktive Beitrag hier, Marian :)
> Hat mir geholfen!!
Ich kann verstehen das meine Antwort dir mangels Sprachkenntniss
nichts gebracht hat, aber deshalb gleich als "nicht konstruktiv"
abgestempelt zu werden ist nicht schön und auch nicht wirklich
gerechtfertigt :(
--=20
Hartmut Holzgraefe, Senior Support Engineer .
MySQL AB, www.mysql.com
Re: Zeitberechung in mySQL4.1 falsch??
am 28.04.2005 07:18:10 von Marian Heddesheimer
On Wed, 27 Apr 2005 23:06:27 +0200, Philliph Mau wrote:
>Danke, das war der einzige konstruktive Beitrag hier, Marian :)
>Hat mir geholfen!!
endlich jemand, der sich auch mal bedankt :-)
Wenn's mit der englischen Original-Doku noch nicht so klappt, kannst
Du gern auch mal in meinen Online-Kurs reinschauen:
http://www.lernpilot.de/wbt/index.php?seite=4
Dein Datumsproblem werde ich demnächst auch als neuen Punkt unter
Tipps & Tricks bei mir veröffentlichen:
http://www.heddesheimer.de/coaching/tipps.html
Marian
--
Online Lernen (auch fuer Blinde geeignet): HTML, PHP, MySQL, Word
http://www.lernpilot.de/wbt/