von calabrese » Mi, 14.03.2012 11:12
Hallo Robert,
du meinst also, Berechnungen sollte ich niemals in die Datenbank eintragen, sondern immer durch Abfragen berechnen lassen? Gibt das nicht irgendwann einen Performanzverlust? Ich dachte, wenn ich alle Dienste, die es gibt in einer Tabelle einmal deklariere und die Dauer berechne, könnte die Tabelle mit den Einsatzzeiten ja immer darauf zurückgreifen...
Zu deinem "Problem" mit Mitternacht (auch ich muss über Mitternacht gehen...). Probier es mal so (ganz einfach):
Code: Alles auswählen
SELECT
"Anfang", "Ende", DATEDIFF( 'mi', "Anfang", "Ende" ) AS "Minuten",
CASE
WHEN
DATEDIFF( 'mi', "Anfang", "Ende" ) < 0
THEN
DATEDIFF( 'mi', "Anfang", "Ende" ) / 60.00 + 24
ELSE
DATEDIFF( 'mi', "Anfang", "Ende" ) / 60.00
END
AS "Stunden" FROM "Dienste_gesamt"
Dann brauchste auch keinen Zeitstempel. Wenn das Ergebnis kleiner 0 ist, werden einfach 24 Stunden draufgepackt!
Aber achte auf den richtigen Teiler: DATEDIFF liefert ein Integer zurück. Und Integer/Integer=Integer! Aber wenn du 60.00 nimmst, dann kriegste auch bsp. 6,25 Stunden geliefert...
Schönen Gruß
Calabrese
Hallo Robert,
du meinst also, Berechnungen sollte ich niemals in die Datenbank eintragen, sondern immer durch Abfragen berechnen lassen? Gibt das nicht irgendwann einen Performanzverlust? Ich dachte, wenn ich alle Dienste, die es gibt in einer Tabelle einmal deklariere und die Dauer berechne, könnte die Tabelle mit den Einsatzzeiten ja immer darauf zurückgreifen...
Zu deinem "Problem" mit Mitternacht (auch ich muss über Mitternacht gehen...). Probier es mal so (ganz einfach):
[code]SELECT
"Anfang", "Ende", DATEDIFF( 'mi', "Anfang", "Ende" ) AS "Minuten",
CASE
WHEN
DATEDIFF( 'mi', "Anfang", "Ende" ) < 0
THEN
DATEDIFF( 'mi', "Anfang", "Ende" ) / 60.00 + 24
ELSE
DATEDIFF( 'mi', "Anfang", "Ende" ) / 60.00
END
AS "Stunden" FROM "Dienste_gesamt"[/code]
Dann brauchste auch keinen Zeitstempel. Wenn das Ergebnis kleiner 0 ist, werden einfach 24 Stunden draufgepackt!
Aber achte auf den richtigen Teiler: DATEDIFF liefert ein Integer zurück. Und Integer/Integer=Integer! Aber wenn du 60.00 nimmst, dann kriegste auch bsp. 6,25 Stunden geliefert...
Schönen Gruß
Calabrese