Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Conversion efficace des dates entre l'heure UTC et l'heure locale (c'est-à-dire PST) dans SQL 2005

Créez deux tables, puis joignez-les pour convertir les dates GMT stockées en heure locale :

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

Créez le tableau de l'heure d'été et remplissez-le avec autant d'informations que possible (les lois locales changent tout le temps, il n'y a donc aucun moyen de prédire à quoi ressembleront les données dans les années à venir)

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

Rejoignez-les comme ceci :

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

Convertissez les dates comme ceci :

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