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
Vous devez vous connecter pour publier un commentaire.
Découvrez cette question précédente et réponse pour plus de renseignements:
Effectivement la Conversion de dates entre l'UTC et Local (ie. PST) de temps dans SQL 2005
(Pour résumer, vous avez besoin de construire de fuseau horaire et d'heure d'été des tables dans Sql Server 2005. Dans la prochaine version de Sql Server nous obtenir de l'aide avec les fuseaux horaires.)
OriginalL'auteur Eric Z Beard
Si je ne me trompe, le GETUTCDATE() fonction utilise le fuseau horaire défini sur le serveur, il n'a aucune information concernant le client du fuseau horaire (ou n'importe quel fuseau horaire). Je ne pense pas que l'information est stockée dans SQL Server 2005, ce qui rend impossible à calculer cette information.
On peut "emprunter" les données à partir de Oracle du fichier de fuseau horaire et de construire votre propre fonction SQL Server?
Hors sujet (peut-être utile à quelqu'un d'autre), mais si vous utilisez Oracle, vous pouvez utiliser le FROM_TZ fonction et " AU TEMPS de la ZONE:
OriginalL'auteur neonski
Hmm, je suppose que je ne suis pas la compréhension du problème. Si la base de données de l'app est déjà de stocker les horodatages UTC pour l'ensemble de ses opérations, et que vous voulez à la somme des valeurs depuis le début de l'année "heure locale", votre état de santé devrait être quelque chose comme:
L'heure d'été peut être sur ou hors fonction de la date de l'année de l'exécution de la requête - mais
getdate()
le prend en compte, de sorte que vous avez à calculer dynamiquement le décalage à chaque fois.OriginalL'auteur Ron Savage