Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

come convertire tutte le colonne datetime in un database espresso SQL Server 2005 con dati in UTC

Supponendo che tu conosca l'offset tra UTC e il fuso orario in cui sono archiviati i dati, è piuttosto semplice:

DECLARE @offset INT;
SET @offset = <offset>;
UPDATE table SET col = DATEADD(HOUR, @offset, col);

Nota che potrebbe essere negativo o positivo, non ho idea di quale parte di Greenwich tu sia.

Ovviamente questo diventa più complicato se ci si trova in un fuso orario che osserva l'ora legale; in questo caso potrebbe essere necessaria una soluzione più ampia come l'utilizzo di una tabella calendario. Ciò è particolarmente complesso se i tuoi dati risalgono a prima che George Bush cambiasse le regole dell'ora legale americana, ad esempio. Ho un articolo di molto tempo fa che potrebbe essere utile ; una serie più recente è qui:

Inoltre se uno qualsiasi dei tuoi dati cade in quella finestra tra le 00:00 e le 2:00 di un giorno di primavera avanti/indietro, dove non sono mai sicuro se sia giusto cambiarlo perché è il giorno del cambio o non cambiare perché sono le 2 del mattino.