2014-01-13 2 views
5

SQL datetimeoffset変数の時間部分のみを設定するにはどうすればよいですか?例えばSQLのdatetimeオフセットの時間部分のみを変更する

は:

@startdate should be '2014-01-11 00:00:00 +02:00' 
@enddate should be '2014-01-12 00:00:00 +02:00' 

しかし、私はオフセットをゼロに設定しようとしたすべてのソリューション:

DECLARE @date datetimeoffset = '2014-01-11 11:04:26 +02:00' 

私はさらに2つのdatetimeoffsetsを計算します。

:テーブルのdatetimeoffset列と比較する必要があるため、結果に元のオフセットが必要です。だから、日付にキャスティングするだけでは機能しません。

さらにノート:これはSQL2012で非常に簡単になります。 DATETIMEOFFSETFROMPARTSを使用できます。残念ながら2012年にアップグレードすることはできません。例:

SET @startdate = SELECT DATETIMEOFFSETFROMPARTS(datepart(yyyy, @date), datepart(mm, @date), datepart(dd, @date), 0, 0, 0, 0, datepart(tz, @date), 0, 7); 
+0

あなたは 'キャスト(日付など@startdateを)'を使用、その後、時間の部分を削除したい場合。 –

+0

実行しようとしたコードと正確な結果を明確に記述できますか? – OzrenTkalcecKrznaric

答えて

3
DECLARE @date DATETIMEOFFSET = '2014-01-11 11:04:26 +02:00' 

SELECT @date InputDate, 
CONVERT(DATETIMEOFFSET,(CONVERT(VARCHAR(20),CONVERT(DATETIME,(CONVERT(DATETIME,CONVERT(DATE,@date))))) + ' ' + RIGHT(@date,6))) StartDate, 
CONVERT(DATETIMEOFFSET,(CONVERT(VARCHAR(20),CONVERT(DATETIME,(CONVERT(DATETIME,CONVERT(DATE,DATEADD(day,1,@date)))))) + ' ' + RIGHT(@date,6))) EndDate 
+0

ありがとう、これは素晴らしい作品です。もう少し説明してもらえますか?それは、入力日付の部分から文字列をまとめているようです。 – Kev

+0

CONVERT(VARCHAR(20)、(CONVERT(DATETIME、CONVERT(DATE、@日))) 上記部分は、入力から日付を取得し、ここでそう明示的な変換時間が00であることができる日時に変換するために使用され:00.00 – Kishore

+0

2.ここでは、文字列関数(右関数)を使用して入力からオフセット値を取得しています。これは、date関数がTimeoffset – Kishore

4
DECLARE @date DATETIMEOFFSET = '2014-01-11 11:04:26 +02:00' 

SELECT TODATETIMEOFFSET(CAST(@date AS date),DATEPART(tz,@date)) 
SELECT TODATETIMEOFFSET(DATEADD(day,1,CAST(@date AS date)),DATEPART(tz,@date))