2017-01-04 10 views
0

SQL Serverクエリで、datetimeoffsetを対応するタイムゾーンに変換することは可能ですか?私は私のSQLクエリをしたい00SQL ServerのDateTimeOffsetをタイムゾーンに変換する

2015年1月3日0時30分-06:00

2015年1月10日0時30分-05として例えば、私は値を格納していますCSTまたはCDTとして-06:00を表示し、夏時間が有効な場合はESTまたはEDTとして-05:00を表示します。

私は私が最終的にディスプレイに私の結果セットの列たいRSSフィードをコードしています:

金、2015年1月2日午後06時30分CST

金、2015年1月9日午後06時30分EST

ご協力いただければ幸いです。ありがとう!

+1

なぜ-06:00 CSTですか?これは、有効なタイムゾーンの数のいずれかになります。米国のタイムゾーンだけが必要ですか? DATEPART(TZoffest、YourDate)とcase式を使用できます。 –

+0

SQL Serverは、DateTimeOffsetのタイムゾーン名を返す組み込み関数を提供していません。そのような関数を作成するか、使用するアプリケーションで書式を設定する必要があります。 – wdosanjos

+0

@ wdosanjosこれは機能を必要としません。米国のタイムゾーンだけがあれば、簡単なケース式でこれを簡単に処理できます。 –

答えて

0

ここでは、DATEPARTを使用してこれを行う方法の例を示します。さらにタイムゾーンが必要な場合は、ルックアップテーブルを使用してDATEPARTの値を結合する必要があります。ただし、オフセットごとに複数のタイムゾーンがあることに注意してください。それらは緯度によって異なります。

create table #TimeZoneExample 
(
    MyDateTimeOffset datetimeoffset 
) 

insert #TimeZoneExample 
select '2015-01-03 00:30 -06:00' union all 
select '2015-01-10 00:30 -05:00' 

select convert(datetime, MyDateTimeOffset) as PostDate 
    , case DATEPART(TZoffset, MyDateTimeOffset)/60 
     when -5 then 'EST' 
     when -6 then 'CST' 
     when -7 then 'MST' 
     when -8 then 'PST' 
     else 'Unknown Time Zone' 
    end 
from #TimeZoneExample 

drop table #TimeZoneExample 
+1

残念ながら、これはサマータイムを考慮していません。 – wdosanjos

+0

コード例のMr. Langeありがとうございます。 – behofmann

+0

良い点の@wdosanjosと、もちろんそうではないすべての場所/国/州は夏時間を使用しているためにも近接して設けられ例の情報を与え、これを行うことはほぼ不可能であろう。提案されているような国際時代に対応するためには、これをかなり拡張する必要があります。正確な結果を得るには、datetimeオフセットだけではなく、より多くの情報が必要になります。正確な時刻を判断できるように、場所も知る必要があります。 100%がここに必要ですが確かに言及する価値があるかどうかは不明です。 –

0

私はこれで仕事をしていたとき、私は実際に動作する唯一のオプションは、UTCとしてすべての日付/時刻を保存することであることに気づき、どの時間帯が変更されたとき示す表に結びつけるタイムゾーンインジケータを含みます(夏時間など)が発生します。これには、データ用のカスタムコードが必要です。

幸いにも、誰かがDSTの遷移などを含むタイムゾーンデータのデータベース(IANA Time Zone DB)を維持しています。 GitHubのSQL Server Timezone Support Projectなど、生データを自分で使用して更新することも、これを行う方法の他の例も見て回ることができます。

最後に、UTC、Timezone、および変換データベースは、タイムゾーン間の時間の完全な精度と変換可能性を保証する唯一の方法です。特に、UTCからの15分または1/2時間シフトです。

関連する問題