Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Convertendo efetivamente datas entre UTC e hora local (ou seja, PST) no SQL 2005


Crie duas tabelas e, em seguida, junte-se a elas para converter as datas GMT armazenadas para a hora local:
TimeZones     e.g.
---------     ----
TimeZoneId    19
Name          Eastern (GMT -5)
Offset        -5

Crie a tabela de horário de verão e preencha-a com o máximo de informações possível (as leis locais mudam o tempo todo, portanto, não há como prever como serão os dados nos próximos anos)
DaylightSavings
---------------
TimeZoneId    19
BeginDst      3/9/2008 2:00 AM
EndDst        11/2/2008 2:00 AM

Junte-se a eles assim:
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

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