2010-11-12 4 views
1

J'ai une table qui contient une valeur toutes les 30 minutes par mois, par ex.Convertir les dates GMT en BST à la volée dans SQL Server 2000

20/03/2010 00:00 12 
20/03/2010 00:30 14 

etc

Toutes ces données sont stockées dans GMT

je dois faire une sélection sur ce tableau pour les données en temps bst/horloge

par exemple

select * 
from tbl 
where dt between '01 April 2010' and '30 April 2010 23:30' 

en BST comme la plage de dates ci-dessus est la date à convertir

Je dois aussi une façon de prendre l'heure de passage et la fin de Mars et Octobre compte

Unfortunatly Je ne peux pas mettre à jour le serveur SQL

Est-il possible que je peux le faire dans SQL pour SQL Serveur 2000?

quelque chose comme une fonction que je pourrais faire?

select * 
from tbl 
where fnConvertToClockTime(dt) between '01 April 2010' and '30 April 2010 23:30' 

Lorsqu'en GMT la fonction renverrait la date exacte de la table

Vive

Rupert

+0

Quel langage de programmation utilisez-vous? Ne serait-il pas plus sûr de laisser la base de données faire tout en UTC et de faire tout le maths datetime dans un langage de programmation, qui gère cela correctement et envoie des SELECTs à la base de données en UTC? – eumiro

+0

Im en utilisant c sharp mais je ne veux pas vraiment utiliser le langage car il devient beaucoup plus compliqué de cette façon, je voudrais faire beaucoup avec ces données, comme l'addition, la boucle, etc Changer cela pour utiliser la langue serait conduire à une grande réécriture de code. – Rupert

Répondre

0

J'ai le même problème et je enquêtent sur l'utilisation des tables de calendrier pour ces convserions . Stocker toutes les dates en temps UTC puis convertir au besoin, je vais probablement créer des vues pour les différents fuseaux horaires pour éviter le passage des paramètres, mais je suppose qu'une procédure stockée fonctionnerait également.

J'ai trouvé quelques informations utiles ici: how-do-i-convert-local-time-to-utc-gmt-time

Et un article associé sur les tables de calendrier ici: why-should-i-consider-using-an-auxiliary-calendar-table

+0

Cela semble intéressant, je pourrais créer une table temporaire qui contient toutes les dates entre la plage de dates et un décalage, puis ajouter à l'heure de la date principale? Une complication est que ces données sont toutes les demi-heures – Rupert

+0

J'aurais une table permanente, même avec une demi-heure, c'est seulement 175200 lignes pour 10 années de données (2 * 24 * 365 * 10). Mais les différences de fuseau horaire sont des heures entières, la table de consultation n'aurait pas à s'inquiéter de quelques minutes. (Je peux être déroutant des choses avec cette description, je suis encore en train de résoudre le problème moi-même!) – Tony

+0

ok je vais jeter un oeil. Je pensais plus dans le sens de dire si je suis en train de sélectionner des données pour février 2000, travaillant sur les off-set pour toutes les heures en feb dans une table temporaire et rejoignant cela – Rupert