Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Effektives Konvertieren von Datumsangaben zwischen UTC und lokaler Zeit (dh PST) in SQL 2005

Erstellen Sie zwei Tabellen und verbinden Sie sie dann, um gespeicherte GMT-Daten in Ortszeit umzuwandeln:

TimeZones     e.g.
---------     ----
TimeZoneId    19
Name          Eastern (GMT -5)
Offset        -5

Erstellen Sie die Sommerzeittabelle und füllen Sie sie mit so vielen Informationen wie möglich (lokale Gesetze ändern sich ständig, daher gibt es keine Möglichkeit vorherzusagen, wie die Daten in Jahren aussehen werden)

DaylightSavings
---------------
TimeZoneId    19
BeginDst      3/9/2008 2:00 AM
EndDst        11/2/2008 2:00 AM

Schließen Sie sich ihnen wie folgt an:

inner join  TimeZones       tz on x.TimeZoneId=tz.TimeZoneId
left join   DaylightSavings ds on tz.TimeZoneId=ds.LocalTimeZone 
    and x.TheDateToConvert between ds.BeginDst and ds.EndDst

Konvertieren Sie Daten wie folgt:

dateadd(hh, tz.Offset + 
    case when ds.LocalTimeZone is not null 
    then 1 else 0 end, TheDateToConvert)