2011-06-23 3 views
2

J'ai quelques colonnes dans quelques tables de ma base de données qui se trouvent toutes dans les valeurs DateTime du serveur localisé. Je veux les convertir tous en valeurs UTC DateTime (ne doit pas être DateTime2 car il sera supposé que les nouvelles valeurs seront en UTC).Sql Server 2008 - Convertir la colonne DateTime localisée en UTC

Je voudrais le faire dans une seule instruction SQL. Je ne suis pas tout à fait sûr de savoir comment effectuer cela car je ne passe pas beaucoup de temps dans la base de données.

Des hypothèses peuvent être faites que mon nom de table est TestTable et ma colonne DateTime localisée est appelée TestDateTime.

Je voudrais que le script fasse la mise à jour de la table ainsi que la conversion.

Un moyen de le faire éventuellement?

Répondre

4

Vous pouvez soustrayez getutcdate() de getdate() pour trouver la différence:

select DateAdd(s,DateDiff(s, getdate(),getutcdate()), LocalizedDateColumn) 

Cela suppose que vous êtes dans le même état d'été/hiver comme le temps que vous essayez de convertir. Pas idéal, mais la meilleure conversion que je connaisse de ce que vous pouvez faire en SQL pur.

Un client C# a une conversion beaucoup plus forte:

yourDateTime.ToUniversalTime() 

Contrairement à la version SQL, la version .NET vous permet de convertir correctement une date hiver pendant l'été.

+1

Je ne suis pas super concerné par la précision de l'heure d'été et je connais déjà mon offset. Je suppose que je peux faire quelque chose comme ceci: 'sélectionnez DATEADD (heure, 5, (sélectionnez TestDateTime de TestTable))' – Brandon

+0

@Brandon: Oui, cela ajouterait 5 heures, comme vous attendez :) – Andomar

+1

Le SQL final était-ce : 'update TestTable set TestDateTime = DATEADD (heure, 5, TestDateTime)'. Travaillé parfaitement. – Brandon

Questions connexes