1

背景:UTCを処理するために最近アップグレードされました。すなわち、それぞれのspとfuncを通過し、utcを処理するためにt-sqlコードを変更しました。たとえば、。getdate()をgetutcdate()などに変更しました。新しい出荷については、dbが空白の場所でうまくいきます。データを保持したいと思っている古い顧客にとっては、すべての日付をutcに更新するスクリプトを実行する必要があります。私はt-sqlで以下のようなコードを作成し、これが最善の方法かどうかを知りたいと思っています。以下は擬似コードです。おかげSQLサーバー2005のエクスプレスデータベースですべてのdatetime列をUTCに変換する方法

foreach (table in mydb.tables()) 
{ 
    foreach (column col in table) 
    { 
     if (col.type == datetime) 
     { 
      update table set col = fn_convert_date_to_utc(col) 
     } 
    } 
} 
+0

なぜC#コードでこれをやっていますか? – JonH

+0

よりもCに精通しているのはt-sqlであり、擬似コードのように読むのも簡単です。私は編集し、これが擬似コードであると指定します。 thx – Gullu

+0

[SQL Server datetime type](http://msdn.microsoft.com/en-us/library/ms187819.aspx)がタイムゾーン情報をキャプチャしていないように見える:すべてのdatetime値をUTCに変換しています同じ/既知のタイムゾーンで? –

答えて

1

あなたはUTCとデータが保存されているタイムゾーン間のオフセットを知っていると仮定すると、それは非常に簡単です:正または負のかもしれません

DECLARE @offset INT; 
SET @offset = <offset>; 
UPDATE table SET col = DATEADD(HOUR, @offset, col); 

注、私はどちら側の見当がつかないあなたはグリニッジです。

もちろん、夏時間を観測するタイムゾーンにいる場合、これはもっと複雑になります。この場合、カレンダーテーブルを使用するなど、より広範なソリューションが必要な場合があります。ジョージブッシュがアメリカのDSTルールを変更する前にデータが戻ってくる場合、これは特に複雑です。私はan article from a long time ago that may be usefulを持っています。より最近のシリーズはこちらです:

あなたのデータのいずれかが午前12時と午前2:00の間、そのウィンドウに該当する場合春のフォワード/フォールバックの日です。私はそれが切り替えの日なので変更するのが妥当か、午前2時前なので変更しないかは決してわかりません。

+0

thx Aaron。私はあなたが提供した情報でこれを行うより良い立場にいます。前にカレンダーテーブルを使用したことはありませんが、新しいことを学ぶには – Gullu

関連する問題