Datum mit DATETIME speichern
Felix K.
- datenbank
Hallo zusammen,
ich möchte für eine Webanwendung in einer Datenbank diverse Daten (im Sinne von "ein Datum, mehrere Daten") speichern. Ich brauche auch wirklich nur das Datum, nicht die Zeit.
Leider bin ich auf MS SQL Server 2005 beschränkt, durch die Firma vorgegeben. SQL 2005 kann nun den DATE-Typ leider noch nicht. Bisher habe ich daher DATETIME benutzt. Allerdings frage ich mich mittlerweile, ob der Server da nicht eventuell über die Sommerzeit stolpern könnte, und mir bei der Umstellung dann alle Daten um 1 Tag verschiebt.
Die Daten werden über PHP/ODBC abgefragt, teilweise dort verarbeitet, teilweise auf dem Client in JavaScript. Damit die Werteübergabe mit JavaScript möglichst reibungsfrei abläuft, würde ich am liebsten Unix-Timestamps benutzen.
Ich habe bereits diese Schnipsel gefunden (als Funktionen gespeichert), um DATETIME zu UNIX und umgekehrt umzuwandeln. Aber inwiefern sind die Sommerzeit-sicher? Kann ich der Datenbank sagen, dass sie ausschließlich UTC benutzen soll? Oder ist es sinnvoll, die Zeiten z.B. als BIGINT direkt als Unixzeit zu speichern?
DATETIME2Unix:
DECLARE @diff BIGINT
IF @dt >= '20380119'
BEGIN
SET @diff = CONVERT(BIGINT, DATEDIFF(S, '19700101', '20380119'))
+ CONVERT(BIGINT, DATEDIFF(S, '20380119', @dt))
END
ELSE
SET @diff = DATEDIFF(S, '19700101', @dt)
RETURN @diff
Unix2DATETIME:
RETURN (SELECT DATEADD(second,@ut, CAST('1970-01-01 00:00:00' AS datetime)))
Felix
Der SqlServer kennt keine Sommerzeit. Das was du ihm gibst wird so gespeichert wie du es ihm gibst, der rechnet da nichts um.
Vielen Dank für die Antwort!
Der SqlServer kennt keine Sommerzeit. Das was du ihm gibst wird so gespeichert wie du es ihm gibst, der rechnet da nichts um.
Das wäre natürlich optimal. Nicht, dass der das in UTC umrechnet und nach einer Umstellung andere Werte zurückgibt.
Felix