2014-01-13 28 views
5

如何只設置SQL datetimeoffset變量的時間部分?只更改SQL中datetimeoffset的時間部分

例如:

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

我想計算另外兩個datetimeoffsets:

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

但我想設置偏移量爲零的所有解決方案。

注意:我需要結果中的原始偏移量,因爲我需要將它們與表中的某些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,@ date))) 上面的部分用於從輸入中獲取日期並將其轉換爲日期時間,因此顯式轉換使得時間爲00 :00.00 – Kishore

+0

2.這裏是從輸入使用字符串函數(右函數)獲得偏移值,因爲datefunction對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)) 
相關問題