2017-05-03 74 views
0

我試圖從sql表中獲取每小時的值,其中記錄有UTC時間戳(我的本地時間提前7小時)。我試圖提取的數據的總價值爲今天早上6點到明天上午6點(當地時間)的價值總和。我試圖如下使用DATEADD:從表中檢索特定24小時時間範圍內的記錄

SELECT VALUES FROM TABLE1 WHERE TRANTIME BETWEEN 
DATEADD(HOUR, 13, CONVERT(DATETIME, CONVERT(DATE, GETUTCDATE())) 
AND 
DATEADD(HOUR, 37, CONVERT(DATETIME, CONVERT(DATE, GETUTCDATE())) 

的邏輯在於早上6點,今日早盤從UTC午夜和明天上午13小時將是自上次DAT午夜37小時。

然而,問題是當UTC日期翻轉時,由於UTC時間現在爲00或01小時,所以我沒有任何數據顯示位於between子句中的日子。

我不知道如何處理正常日期的UTC日期的這種滾動。

+0

我想你一定要找連續兩天的差異,即第一個UTC日期爲11小時,下一個UTC日期爲13小時。 – puzeledbysql

+0

你使用的是什麼版本的SQL-Server? 2016有這個... https://docs.microsoft.com/en-us/sql/t-sql/queries/at-time-zone-transact-sql – Leonidas199x

+0

它的SQL 2014年,我不知道如果我們有這個。 –

回答

0

我認爲關鍵是UTC轉換爲本地時間第一次,以確保您最初同步的日子,避免當你在你的本地時間拉側翻:

SELECT VALUES FROM TABLE1 WHERE TRANTIME BETWEEN 
DATEADD(HOUR, 13, CONVERT(DATETIME, CONVERT(DATE, DATEADD(HOUR,-7,GETUTCDATE())) 
AND 
DATEADD(HOUR, 37, CONVERT(DATETIME, CONVERT(DATE, DATEADD(HOUR,-7,GETUTCDATE())) 
相關問題