Déterminer le Décalage de fuseau Horaire en T-SQL

Ma base de données de l'application va être déployée sur plusieurs sites dans différents fuseaux horaires.

J'ai besoin d'un T-SQL fonction qui permettra de déterminer l'UTC heure de minuit le 1er janvier de l'année en cours pour le CUMUL annuel de calculs. Toutes les données sont stockées dans les horodatages UTC.

Par exemple, Chicago est UTC-6 avec l'Heure d'été (DST), la fonction doit retourner '2008-01-01 06:00:00" si exécuté à tout moment en 2008 à Chicago. Si à New York (GMT-5 + DST) de l'année prochaine, il doit revenir '2009-01-01 05:00:00'.

Je peux obtenir l'année en cours à partir de YEAR(GETDATE()). J'ai pensé que je pourrais faire un DATEDIFF entre GETDATE() et GETUTCDATE() de déterminer le décalage, mais le résultat dépend de savoir si la requête est exécutée au cours de l'heure d'été ou pas. Je ne sais pas du tout construit en T-SQL pour déterminer le décalage ou si l'heure actuelle est l'heure d'été ou pas?

Quelqu'un aurait-il une solution à ce problème en T-SQL? Je pourrais coder en dur ou de les stocker dans une table, mais préfère ne pas le faire. Je suppose que c'est une situation parfaite pour l'utilisation de l'Intégration du CLR dans SQL Server 2005. Je me demandais simplement si il y a un T-SQL solution que j'ignore?

OriginalL'auteur Andy Frieders | 2008-10-07