2015-01-09 6 views
5

ツール内に設定された会議の日付、時刻、およびタイムゾーンを保存しようとしています。私は、ユーザーが日付と時刻を指定するだけでなく、タイムゾーンリストから選択することもできます。SQL Server datetimeoffsetの使用

私の問題は、どのように3つの部分をすべて取り、格納するために正しいdatetimeoffsetにフォーマットするのかを理解しようとしています。これで

YYYY-MM-DD hh:mm:ss[.nnnnnnn] [{+|-}hh:mm] 

私の最初の質問は私のタイムゾーンの値がドロップダウンする必要がありますものです:

は、私は、これはSQL Serverが datetimeoffsetのために必要なフォーマットであると考えていますか?

第2に、このデータ列を渡してdatetimeoffsetに必要な形式に変換するためにSQL Serverに組み込まれていますか?

+5

日付は**なし**の形式です。それらはバイナリ値です。書式は、文字列を変換/解析する場合にのみ適用されます。パラメータ化されたクエリとdatetimeoffset型のパラメータを使用すると、構文解析を行う必要はありません –

+1

http://sqlfiddle.com/#!3/2a110d/2 – chridam

+0

恐ろしいので、生成する方法を理解する必要がありますオフセット値を持つタイムゾーンのリスト。ありがとう! – SBB

答えて

4

ツールが時間から文字列に変換できる場合は、それを含む形式に変換します。 [.nnnn]部分はナノ秒単位です。私は、そのレベルの正確さを必要とするアプリケーションは見ていません。第2レベルの精度でOKであれば、datetimeoffset(0)で十分です。

例:

DECLARE @time_str varchar(30) = '2015-01-19 7:20:00 -08:00' 
DECLARE @time datetimeoffset(0) = CONVERT(datetimeoffset, @time_str) 

SELECT DATEPART(YEAR, @time), 
     DATEPART(MONTH, @time), 
     DATEPART(DAY, @time), 
     DATEPART(HOUR, @time), 
     DATEPART(MINUTE, @time), 
     DATEPART(SECOND, @time), 
     DATEPART(TZOFFSET, @time) 
1

はい、のDateTimeOffsetは正確に何をしたいです。タイムゾーンのオフセットは、現実の世界に存在するかどう

第二に、可能なオフセットのためのあなたの選択リストは、ISOの一覧から来る必要があります(http://en.wikipedia.org/wiki/List_of_tz_database_time_zones

SQL Serverは気にしない、それだけで有効にする必要があります。いくつかのサンプルがあります:

CREATE TABLE #tmp1 (dto DATETIMEOFFSET); 

INSERT INTO #tmp1 (dto) VALUES (SYSDATETIMEOFFSET()) --system timestamp 
INSERT INTO #tmp1 (dto) VALUES ('2015-01-19 7:20:00 -08:00') --valid date, time, and offset 
INSERT INTO #tmp1 (dto) VALUES ('2015-01-19 7:20:00 -08:16') --vaid date, valid time, made up offset that doesn't exist in the real world. 

SELECT * 
FROM #tmp1 
関連する問題