Migrieren Sie die DateTime-Spalte von SQL Server auf DateTimeOffset
Ich habe einen alten Tisch mit ein paar Zeilen, die eine datetime-Spalte. Ich möchte diesen Schalter, um datetimeoffset, aber ich möchte in der Lage sein zu transfer die Daten, die bereits vorhanden ist. So bin ich etwas wie:
SET IDENTITY_INSERT Table_Temp ON
INSERT INTO Table_Temp
(Col0, ... ColN,)
SELECT
COl0,.... ColN, from
Table_Original;
SET IDENTITY_INSERT Table_Temp OFF
Dieser funktioniert, aber der offset eingestellt ist 0 wenn ich die dattime zu datetimeoffset-Zuordnung. Glücklicherweise ist das offset, dass ich ihn einstellen will, ist der offset des aktuellen Systems. Ich bin kein tsql-guru, aber ich kann nicht scheinen, um herauszufinden, eine einfache Möglichkeit, dies zu tun.
Ich möchte in der Lage sein, den Versatz, die innerhalb der Konvertierung. Ich würde resort zu tun, eine c# - Dienstprogramm(oder PowerShell), aber ich würde lieber halten Sie es einfach.
InformationsquelleAutor der Frage hdz | 2010-01-05
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie eine version von SQL Server weiß, dass der datetimeoffset-Datentyp, diese syntax wird für die Arbeit bekommen Sie das lokale tz-offset des Servers:
select datepart(tz,sysdatetimeoffset())
Ist das Ergebnis in MINUTEN an.
InformationsquelleAutor der Antwort Broam
Siehe unten für doc, Sie wollen wahrscheinlich etwas wie:
Vom MSDN
InformationsquelleAutor der Antwort Hogan
Diese Konvertierungen Funktionen arbeiten nicht korrekt, wenn DST saving ist aktiv in die Ziel-Zeitzone, die Zeitzone offset-änderungen in das selben Jahr.
InformationsquelleAutor der Antwort Softlion
Können Sie herausfinden, was den offset von der aktuellen SQL-server ist mit den folgenden.
Sie brauchen, um den offset in Minuten und nicht in Stunden, da es eine Anzahl von einer halben Stunde und sogar ein Viertel-Stunden-Zeitzone.
Mithilfe der Minuten-Wert, den Sie verändern können deine Werte gehen in (vorausgesetzt, Sie wurden alle historisch aufgezeichnet, die als lokale Zeit), indem Sie mit so etwas wie
Effizienz würde ich berechne es mal in eine variable und benutzen, da ist der Unterschied nicht zu ändern.
InformationsquelleAutor der Antwort Andrew
Für jeden, der versucht, dieses problem zu lösen, richtig, Buchhaltung für die Sommerzeit hier ist das tool, um es zu tun.
https://github.com/mj1856/SqlServerTimeZoneSupport
InformationsquelleAutor der Antwort Mihail Shishkov
Dies ist eine leichte Variante einer Antwort bereits vorgesehen, und berücksichtigt NICHT die Sommerzeit. Aber es könnte gut sein, genug für viele Zwecke:
InformationsquelleAutor der Antwort Tyler Hains