Zeitformate mal anders

Charly

Datenbank-Guru
Beiträge
306
Hallo zusammen,

Ich habe mir Heute ein paar mal über Zeit- und Datumsformatierungen den Kopf zerbrochen.
Um den ganzen Zeit und Datumsformatierungen aus dem Weg zu gehen habe ich mir dann mal etwas Unkonventionelles überlegt.

Ist nicht ganz der Standardweg um mit Zeitformaten umzugehen.

So ein Datum wird ja als float gespeichert.

Also habe ich ein bisschen rumgerechnet.

1 Sekunde = 0.0000115740740743
1 Minute = 0.0006944444444446
1 Stunde = 0.0416666666666667 (Eigentlich mit 5 als letzte Ziffer)

Mit diesen Werten kann ich jetzt die Uhrzeit für ein Datum nach meinen Wünschen einstellen ohne mir Gedanken über die Konvertierung und Berechnung von Datetime-Werten zu machen.

Beispiel in T-SQL:

Code:
DECLARE @Sekunde As float
DECLARE @Stunde AS float
DECLARE @Minute As float

SET @Sekunde =  0.0000115740740743
SET @Minute = 0.0006944444444446
SET @Stunde = 0.0416666666666665

-- Aktuelles Datum + Uhrzeit auf 17:30:45
-- Die Umwandlung des Datetime-Werts in Integer löscht die Uhrzeit

SELECT CONVERT(Datetime,CAST(getdate() as integer))
+ CAST((@Stunde * 17) + (@Minute * 30) + (@Sekunde *45) AS Datetime)

Ergebnis: 2011-03-31 17:30:45.000
Ich hoffe mal das irgendjemand damit was anfangen kann.:)

Gruß Charly

PS: in den Millisekunden gibt es manchmal Rundungsfehler.:(
 
Werbung:

Walter

Administrator
Teammitglied
Beiträge
443
Wozu soll das denn gut sein?
confused.png
 
Werbung:

Charly

Datenbank-Guru
Beiträge
306
Ab SQl-Server2005 gibt es Datentypen die nur Datumswerte oder Zeitwerte speichern können. Die Versionen davor können das nicht.

Die Idee ist einfach eine Zeit ohne Ihr Datum zu speichern und zu bearbeiten.(oder Datum ohne Zeit).

Wenn ich die Zeit oder das Datum nicht als Datetime sondern als float oder int speichere habe ich nur die Information in der DB stehen die ich haben will.
Die Werte lassen sich dann auch ohne Probleme in ein Datetime-Format zurück konvertieren.


Auf jeden Fall zeigt es ganz gut wie ein Datum gespeichert wird.

Gruß Charly
 
Oben