MYSQL 5.1 Differenz zweier datumswerte

Hallo,

folgendes problem:

Habe 2 Datumswerte

Anfangsdatum, Enddatum
beide Daten sind im Vormat yyyy-mm-dd hh:mm:ss

ich würde gerne die differenz der beiden werte ermitteln , quasi enddatum - anfangsdatum
beispielausgabe: 2 Tag(e) 12:23:39
die tage kann ich durch TO_DAYS ermitteln und diese dann von einander subtrahieren, aber wie ist es bei den restlichen werten ?

wenn ich einfach (enddatum - anfangsdatum) As Differenz ausgeben lasse erhalte ich eine zahl wie z.B. 55000

auch DATE_SUB bringt mich nicht weiter, da hier ein interval erwartet wird

bei DATEDIFF() werden die Stunden,Minuten und Sekunden nicht mit einbezogen…

wenn jemand eine ellegante lösung zum rechnen mit datumswerten hat, wäre ich sehr dankbar :smile:

gruß eddyphone

Moin, eddyphone,

wenn ich einfach (enddatum - anfangsdatum) As Differenz
ausgeben lasse erhalte ich eine zahl wie z.B. 55000

das ist ja auch richtig. Die Differenz wird in Mikro-, Milli-, Sekunden oder auch Tagen errechnet, je nach DBMS. MS Access zB rechnet in Tagen.

Gruß Ralf

habe herausgefunden was das für eine zahl ist:

wenn ich einfach denen einen wert vom anderen subtrahiere macht er daraus aine zahl

also aus 2010-01-01 12:01:10

=

20100101120110

und das salbe mit dem anderen wert, somit kann ich mit der zalh nichts anfangen

Hi edyphone,

habe herausgefunden was das für eine zahl ist:

wenn ich einfach denen einen wert vom anderen subtrahiere
macht er daraus aine zahl

also aus 2010-01-01 12:01:10

=

20100101120110

das klingt alles sehr komisch. Was Du da siehst, ist keine Zahl, sondern eine Zahl als Datum formatiert.

Um herauszukriegen, was Dein DBMS tut:

  • Leg 2 Variablen d1 und d2 vom Typ Date an, 1 namens dDiff vom Typ Double
  • Weise d1 den Wert „2010-01-01 12:01:10“ zu, d2 den Wert „2010-01-02 12:01:10“
  • Subtrahiere die beiden voneinander und weise das Ergebnis der 3. Variablen zu, also dDiff = d2 - d1.
  • Zeig uns, was jetzt in dDiff steht.

Gruß Ralf

Hallo,

folgendes problem:

Habe 2 Datumswerte

Anfangsdatum, Enddatum
beide Daten sind im Vormat yyyy-mm-dd hh:mm:ss

ich würde gerne die differenz der beiden werte ermitteln ,
quasi enddatum - anfangsdatum
beispielausgabe: 2 Tag(e) 12:23:39
die tage kann ich durch TO_DAYS ermitteln und diese dann von
einander subtrahieren, aber wie ist es bei den restlichen
werten ?

wenn ich einfach (enddatum - anfangsdatum) As Differenz
ausgeben lasse erhalte ich eine zahl wie z.B. 55000

???

auch DATE_SUB bringt mich nicht weiter, da hier ein interval
erwartet wird

???

bei DATEDIFF() werden die Stunden,Minuten und Sekunden nicht
mit einbezogen…

jup

und
TIMEDIFF()

gibt alles in zeit zurück, teilt man das noch durch 24 hat man tage etc.

http://dev.mysql.com/doc/refman/5.1/de/date-and-time…

und
TIMEDIFF()

gibt alles in zeit zurück, teilt man das noch durch 24 hat man
tage etc.

http://dev.mysql.com/doc/refman/5.1/de/date-and-time…

ach ja, wenn dir das format nicht gefällt welches heraus kommt, dann nimmt man

DATE_FORMAT(date,format)

also TIME_FORMAT(TIMEDIFF(startdate,enddate),"%k:%s")
etc

man kann tages differenzen auch so ermitteln
TO_DAYS(enddate) - TO_DAYS(startdate)

kann auf dem server leider keine tabellen anlegen, habe nur lesenden zugriff,

habe das problem jetzt anders gelöst ich subtrahiere jeweils den unix_timestamp des einen datums von dem unix_timestamp des anderen,

in php rechne ich mir dann meine Tage, Stunden und sekunden aus,
habe zwar auf eine einfache lösung in mysql gehofft aber naja :wink:

trotzdem danke für eure hilfe !

habe das problem jetzt anders gelöst ich subtrahiere jeweils
den unix_timestamp des einen datums von dem unix_timestamp des
anderen,

in php rechne ich mir dann meine Tage, Stunden und sekunden
aus,
habe zwar auf eine einfache lösung in mysql gehofft aber naja
:wink:

??? sach mal kannst du lesen oder bist du nicht fähig die funktion
TIMEDIFF(exp,exp) zu nehmen , die macht doch genau das.

SELECT 
TRUNCATE((HOUR(TIMEDIFF('2010-09-20 20:00:00','2010-08-20 20:01:01'))/24),0),
HOUR(TIMEDIFF('2010-09-20 20:00:00','2010-08-20 20:01:01'))- TRUNCATE((HOUR(TIMEDIFF('2010-09-20 20:00:00','2010-08-20 20:01:01'))/24),0)\*24,
MINUTE(TIMEDIFF('2010-09-20 20:00:00','2010-08-20 20:01:01')),
SECOND(TIMEDIFF('2010-09-20 20:00:00','2010-08-20 20:01:01'))

für ‚2010-09-20 20:00:00‘ - ‚2010-08-20 20:01:01‘
ergibt 743:58:59

der SQL befehl gibt dann folgendes aus.

Tage :30
Stunden:23
Minuten:58
Secunden:59

also es geht mit SQL und eigentlich auch ganz einfach, wenn mann / frau nur will .

und auch bei nur 1 secunde unterschied gehts

SELECT TRUNCATE((HOUR(TIMEDIFF(‚2010-08-20 20:01:02‘,‚2010-08-20 20:01:01‘))/24),0),HOUR(TIMEDIFF(‚2010-08-20 20:01:02‘,‚2010-08-20 20:01:01‘))- TRUNCATE((HOUR(TIMEDIFF(‚2010-08-20 20:01:02‘,‚2010-08-20 20:01:01‘))/24),0)*24,MINUTE(TIMEDIFF(‚2010-08-20 20:01:02‘,‚2010-08-20 20:01:01‘)),SECOND(TIMEDIFF(‚2010-08-20 20:01:02‘,‚2010-08-20 20:01:01‘))

macht
0 tage
0 stunden
0 minuten
1 secunde :smile:

Oke Oke ich bitte um verzeihung :wink:

hatte es mit der funktion SUBTIME verwechselt, da diese als zweiten ausdruck eine uhrzeit benötigt. aber mit TIMEDIFF funktioniert es super !

Vielen Dank :smile: und 'tschuldigung für die Begriffsstuzigkeit.