5

私のデータベース アプリケーションは、異なるタイム ゾーンの複数のサイトにデプロイされる予定です。

YTD 計算のために、今年の 1 月 1 日の午前 0 時の UTC タイムスタンプを決定する T-SQL 関数が必要です。すべてのデータは UTC タイムスタンプで保存されます。

たとえば、シカゴは夏時間 (DST) の UTC-6 であり、シカゴで 2008 年の任意の時点で実行される場合、関数は「2008-01-01 06:00:00」を返す必要があります。来年ニューヨーク (GMT-5 + DST) で実行する場合は、'2009-01-01 05:00:00' を返す必要があります。

から現在の年を取得できますYEAR(GETDATE())DATEDIFFオフセットを決定するためにbetweenGETDATE()とを実行できると考えGETUTCDATE()ましたが、結果は DST 中にクエリが実行されるかどうかによって異なります。オフセットを決定するための組み込みの T-SQL 関数や、現在の時刻が DST であるかどうかを知りません。

T-SQLでこの問題を解決できる人はいますか? ハードコーディングするか、テーブルに保存することはできますが、そうしないことをお勧めします。これは、SQL Server 2005 で CLR 統合を使用するのに最適な状況だと思います。私が知らない T-SQL ソリューションがあるかどうか疑問に思っています。

4

3 に答える 3

2

関連情報については、この前の質問と回答を確認してください。

SQL 2005 で UTC とローカル (つまり PST) 時間の間で日付を効果的に変換する

(要約すると、Sql Server 2005 でタイム ゾーンと DST テーブルを作成する必要があります。Sql Server の次のバージョンでは、タイム ゾーンに関するヘルプが提供されます。)

于 2008-10-08T00:05:47.143 に答える
0

うーん、私は問題を理解していないと思います。データベース アプリがすべてのトランザクションの UTC タイムスタンプを既に保存しており、年の最初の "現地時間" 以降の値を合計したい場合、条件は次のようにする必要があります。

(timestamp + (getutcdate() - getdate())) > cast('01/01/2008' as datetime)

DST は、クエリが実行される年の時期に応じてオンまたはオフgetdate()にすることができますが、それを考慮に入れるため、毎回オフセットを動的に計算する必要があります。

于 2008-10-07T22:27:07.623 に答える
0

私が間違っていない限り、GETUTCDATE() 関数はサーバーで定義されたタイム ゾーンを使用します。クライアントのタイム ゾーン (または任意のタイム ゾーン) に関する情報はありません。情報は SQL Server 2005 のどこにも保存されていないと思います。そのため、この情報を計算することは不可能です。

Oracle のタイム ゾーン ファイルからデータを「借用」して、独自の SQL Server 関数を構築することはできますか?

トピックから外れていますが (他の人にとっては役に立つかもしれません)、Oracle を使用している場合は、FROM_TZ 関数と「AT TIME ZONE」を使用できます。

FROM_TZ(YOUR_TIMESTAMP, 'UTC') AT TIME ZONE 'America/Dawson_Creek'
于 2008-10-07T22:29:32.767 に答える