2011-06-23 20 views
2

データベースのいくつかのテーブルに、ローカライズされたサーバーのDateTime値にある列があります。これらのすべてをUTCのDateTime値に変換したい(新しい値はUTCであると想定されるため、DateTime2である必要はありません)。Sql Server 2008 - ローカライズされたDateTime列をUTCに変換する

私はこれを単一のSQL文で実行したいと考えています。私はデータベースで多くの時間を費やさないので、これを実行する方法を完全にはわかっていません。

私のテーブル名はTestTableで、私のローカライズされたDateTime列はTestDateTimeとすることができます。

私は、スクリプトの変換だけでなく、テーブルの更新をしたいと思います。

これを実行する方法はありますか?

答えて

4

あなたは違いを見つけるためにgetdate()からgetutcdate()をsubstractすることができます。これは、あなたが変換しようとしている時間と同じ夏/冬の状態にあると仮定し

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

。理想的ではありませんが、私が知っている最良の変換は純粋なSQLで行うことができます。

A C#クライアントがはるかに強いの変換があります:SQLのバージョンとは異なり

yourDateTime.ToUniversalTime() 

を、.NETのバージョンが正しく夏に冬の日付を変換します。

+1

私はDSTの精度に懸念がありません。私はすでにオフセットを知っています。 'DATEADD(時、5、(TestTableからTestDateTimeを選択))を選択してください)' – Brandon

+0

@Brandon:期待通りに5時間を追加するでしょう:) – Andomar

+1

最終的なSQLはこれでした: 'アップデートTestTable TestDateTime = DATEADD(時、5、TestDateTime)'。完璧に働いた。 – Brandon

関連する問題