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

Conversione efficace di date tra UTC e ora locale (es. PST) in SQL 2005

Crea due tabelle e poi unisciti ad esse per convertire le date GMT memorizzate nell'ora locale:

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

Crea la tabella dell'ora legale e compilala con quante più informazioni possibili (le leggi locali cambiano continuamente, quindi non c'è modo di prevedere come saranno i dati negli anni futuri)

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

Unisciti a loro in questo modo:

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

Converti le date in questo modo:

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