2017-05-03 67 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())) 
相关问题