2012-04-20 14 views
3

Windows Azure上で実行するために既存のアプリケーションを移植する処理中です。現在のソリューションは、WindowsがSQL Server上に設定されている時間帯に大きく依存しています。ストアドプロシージャとビューでは、非常に頻繁にGETDATE()を使用します。問題は、SQL AzureがUTCタイムゾーンを使用して実行されていることです。私は、GETDATE()メソッド呼び出しを、タイムゾーンを設定するデータベースの設定に基づいて時間を取得するメソッド呼び出しに置き換えようとしています。私が抱えている問題は夏時間です。誰もが現在の日付/時刻を返し、DSTを適切に調整できるSQLのメソッドを書いていますか?SQL Serverの特定のタイムゾーンの現地時間

私は、UTCの時間をボード全体で使用する必要があると答えてくれる回答をいくつか得るつもりだと思います。それは私がむしろ説明したくない理由のための選択肢に見えません。

私に教えていただける助けや助言をいただければ幸いです。ありがとう。

+0

あなたはUTCを使用するべきです。 DSTへの変換は後部の苦痛であり、DSTの有効期限が切れたときのルールは数年前に変更されています。あなたは変換を行うためにudfを書くことができますが、それは高価な操作になります。 –

+0

DSTはかなり苦しいです。以前の人生では、ユーザーは異なるタイムゾーン設定を持ち、異なるタイムゾーンがDSTの影響を受けるかどうかは異なるため、カレンダーテーブルを使用しました。そのため、ユーザーは自分のタイムゾーンを環境設定として指定し、今から6か月間イベントをスケジュールしたときに、カレンダーテーブルのルックアップに基づいてUTC時刻を保存しました。 –

+2

地元の時間を使いたい理由を聞くのはいいですね。私が知っているものがいくつかありますが、それらは比較的まれです。関連する質問とhttp://blogs.msdn.com/b/sqlprogrammability/archive/2008/03/18/using-time-zone-data-in-sql-server-2008.aspxを見ると、あなたはこれは簡単な作業ではありません。間違いなくT-SQL自体の中にいる必要はありますか?値をストアドプロシージャのパラメータとして渡すことはできません。 –

答えて

1

我々はDateTimeOffsetの代わりDateTimeする問題の列を更新することにしました。

回答したすべての方に感謝します。

0

これが役立つかどうかはわかりません。しかしこれは、SERVERレジストリで読み取られたレジストリを実行します。ローカルコンテキストでは、SERVERのタイムゾーンとGMTとの差を求め、そこから必要な計算をperofrmすることができます。私が他のフォーラムの投稿の1つから取り上げた便利な小さなトリックです(クレジットがそこにあります)。

Use Master 
Go 



DECLARE @ZONEDIFF INT 

EXECUTE dbo.xp_regread 'HKEY_LOCAL_MACHINE','SYSTEM\CurrentControlSet\Control\TimeZoneInformation','ActiveTimeBias', @ZONEDIFF OUT 

SELECT getdate() AS MyTime, dateadd(minute, @ZONEDIFF, getdate()) as SERVERZONE 

あなたが正しく理解していない場合は、私に教えてください。

マック

+0

現在のタイムゾーンの違いだけに気を付けるなら、なぜXPとレジストリに迷惑をかけるのではなく、 'SELECT DATEDIFF(MINUTE、GETDATE()、GETUTCDATE());'私は問題がそれよりも複雑であると思う - そして、あなたは特定の日にデルタを知る必要がある、今だけではない。 –

+0

申し訳ありませんが、私が探しているものではありません。私は、私たちのデータベースに設定されているタイムゾーン(クライアントのテーブル内)にもっと興味があります。 – Bryan

関連する問題