タイムゾーンとタイムゾーンが2つの異なるものですが。夏時間が使用される場合、タイムゾーンは異なるオフセットを持つことができます。タイムゾーンのサポートがSQL Serverの最新バージョンである2016に追加されました。
datetime
の値をoffset/timezoneの値に変換する方法と、その値をUTCに変換する方法について説明します。
SQL Server 2014までのバージョンでは、ローカルタイムゾーンの正しいオフセットを事前に決定する必要があります(C#コードなど)。あなたはそれを持っていたら、TODATETIMEOFFSETで特定のオフセットで `のDateTimeOffsetにdatetime
を変換することができます:
select TODATETIMEOFFSET(GETDATE(),'02:00')
または
select TODATETIMEOFFSET(GETDATE(),120)
これは元の時間と指定したオフセットでdatetimeoffset
値を返します。オフセット別に
スイッチ(例えばUTC)がSWITCHOFFSET機能
select SWITCHOFFSET(@someDateTimeOffset,0)
によって行われるあなたはオフセット
select SWITCHOFFSET(TODATETIMEOFFSET(GETDATE(),120),0)
との両方を組み合わせることができ、パラメータとして渡すことができます。あなたのフィールドがSomeTime
呼ばれると仮定すると、あなたはタイムゾーン名を使用することができますSQL Serverの2016年に
select SWITCHOFFSET(TODATETIMEOFFSET(SomeTime,@offsetInMinutes),0)
を書くことができます。あなたはまだUTCに最初のローカルタイムゾーンに、しかし二重の変換を必要とする:
SELECT (getdate() at time zone 'Central Europe Standard Time') AT TIME ZONE 'UTC'
最初AT TIMEZONE
オフセット+2:00
とdatetimeoffset
を返し、第二は、UTCに変換します。
あなたはdatetime
の代わりにdatetimeinfo
タイプを使用している場合は、おそらくすべての変換を避けることができ
NOTE。 SQL Serverでは、異なるオフセットの値に対して比較、フィルタリング、計算などを行うことができるため、クエリを行うために変換を行う必要はありません。クライアント側では、.NETには同等のDateTimeOffset
タイプがあります。したがって、クライアントコードで変換を行う必要はありません。
これらのフィールドのデータ型は? – qxg
[SQL Serverのタイムゾーンからタイムゾーンへの時刻の日付変換]の可能な複製(http://stackoverflow.com/questions/16872007/date-time-conversion-from-timezone-to-timezone-in-sql-server) –
'datetimeoffset'を使う方が良いでしょうか?あなたはコンバージョンが必要ないでしょうか? –