ich möchte in einer MS SQL Server 2005 Umgebung die Differenz zwischen 2 Datumswerten in Tagen, Stunden, Minuten und Sekunden ermitteln.
Die beiden Datumsfelder sind vom Datentyp datetime.
Ich habe dazu bereits ein Script geschrieben, bei dem ich mit datediff die Differenz zwischen den beiden Werten in Sekunden ermittle, und daraus dann die vollen Tage (= 86400 Sekunden) rausrechne, aus dem verbleibenden Rest die vollen Stunden (= 3600 Sekunden) ermittle, vom verbleibenden Rest die vollen Minuten ( = 60 Sekunden) ermittle usw.
Diese Lösung erscheint mir aber sehr kompliziert und ich bin der Meinung, dass es dafür auch eine einfachere Lösung in SQL geben muß. Vielleicht kann mir von Euch jemand einen Tipp geben. Danke!
danke für Deine Antwort. Die Funktion Datediff ist mir schon bekannt. Ich verwende sie ja auch in meinem Script. Das Problem ist allerdings etwas komplexer. Ich will mir nicht einfach die Differenz zwischen zwei Datumswerten in unterschiedlichen Zeitgrößen ausgeben lassen, sondern ich will die Differenz umgerechnet haben in Tage, Stunden, Minuten und Sekunden. Am Verständlichsten wird’s vermutlich anhand eines Beispiels:
Ale Ergebnis erwarte ich nun:
8 Tage 15 Stunden 42 Minuten 46 Sekunden
Diese Ergebnis ermittelt mein Script auch. Ich vermute nur, dass mein Weg zu umständlich und damit auch unperformant ist.
Wenn ich die Datediff-Funktion wie von Dir vorgeschlagen verwende, erhaltet ich im Prinzip ja immer das gleiche Ergebnis:
8 Tage bzw.
207 Stunden bzw.
12463 Minuten bzw.
747766 Sekunden
Diese Ergebnis ermittelt mein Script auch. Ich vermute nur,
dass mein Weg zu umständlich und damit auch unperformant ist.
Oops, da hab ich das wohl zu schnell überflogen und mich leicht mit der Datediff-Funktion vertan.
Ich glaub, Dir bleibt da nichts anderes übrig, als das so einzeln auszurechnen. Möglicherweise könntest du noch ein wenig Geschwindigkeit gewinnen, wenn Du die Funktionalität in eine Prozedur oder UDF kapselst.
vielen Dank für Deine Antwort. Deine Lösung liefet auch das gewünschte Ergebnis, und ist zudem deutlich einfacher und verständlicher als mein Script.
Eine Verständnisfrage hätte ich aber noch:
was genau bewirkt z.B. der Zusatz %24 ??
iDiff/3600%24 bedeutet, dass ich die Sekunden in Anzahl der Stunden umrechnen lassen möchte und dann diese durch 24 teile (der Tag hat 24h) und den Restbetrag erhalte (% bzw. modulo).
25h % 24 sollte somit 1 ergeben oder 8 modulo 3 ist Rest 2, da 2*3 = 6 und bis zur 8 ein Rest von 2 bleibt.