sql >> Base de Datos >  >> RDS >> Sqlserver

Conversión efectiva de fechas entre UTC y hora local (es decir, PST) en SQL 2005

Cree dos tablas y luego únase a ellas para convertir las fechas GMT almacenadas a la hora local:

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

Cree la tabla de horario de verano y complétela con toda la información que pueda (las leyes locales cambian todo el tiempo, por lo que no hay forma de predecir cómo se verán los datos en los próximos años)

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

Únete a ellos así:

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

Convierte fechas como esta:

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