別のオプションは、ここでは、ローカルの日付と時刻の値にUTCの日付と時刻をマップカレンダーテーブルを使用することです。
ここでの欠点は、粒度の一部が失われていることです。秒が重要な場合、私はこれを実装しません。カレンダーレコードのサイズを調べ、トランザクションテーブルの各レコードの日時を格納するサイズと比較することができます。ボリュームが小さければ小さいほど、このソリューションはあまり有益ではありません。また、ソリューションの将来のレコードを自動的かつ無人で構築していないと、テーブルがレコードを使い果たしてしまい、あなたの後ろに来る人(おそらくあなた自身も)のために時限爆弾が残ってしまいます。
利点ですが、このテーブルのクエリは(これは整数なので)すばやく実行できます。また、NYCサーバーをSacramentoに移行する必要があると判断した場合は、「localDateTime
」を更新し、UTC時間をそのままにしておくことができます。
テーブル構造(粒度は、あなたのニーズに最高になります):
ID int
utc_month int
utc_day int
utc_year int
utc_hour int
utc_minute int
local_month int
local_day int
local_year int
local_hour int
local_minute int
はまだ
別オプションは、マネージアセンブリを展開することである(再びボリュームによって異なります)。 (手順については、このサイトを参照してください、あなたはサーバーの設定変更を行う必要があります。
How to implement a managed udf or sp)ここ
は、私は次のコードは戻ります、私のudf
public static SqlDateTime udf_ConvertUTCDateTime(SqlDateTime utcDateTime)
{
DateTime dt = utcDateTime.Value;
utcDateTime = dt.ToLocalTime();
return utcDateTime;
}
に入れてC#のです変換されたUTC日時挿入またはトリガーでその値を使用するだけです。
Declare @D datetime
set @D = GetUTCDate()
select @D
select dbo.udf_ConvertUTCDateTime(@D)
良い提案ですが、元の投稿への編集をご覧ください。 –