从表中检索特定 24 小时时间范围内的记录
Posted
技术标签:
【中文标题】从表中检索特定 24 小时时间范围内的记录【英文标题】:Retrieving records from a table for a specific 24 hour time frame 【发布时间】:2017-10-01 13:42:57 【问题描述】:我正在尝试从 sql 表中提取每小时值,其中记录有 UTC 时间戳(比我的本地时间早 7 小时)。我试图提取的数据将其总值作为从今天早上 6 点到明天早上 6 点(当地时间)的值的总和。我试图使用 dateadd 如下:
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 日期翻转时,我没有任何位于 between 子句中的当天数据,因为 UTC 时间现在就像 00 或 01 小时。
我不确定如何在常规日期处理 UTC 日期的滚动。
【问题讨论】:
我认为你必须得到连续两天之间的差异,即第一个 UTC 日期的 11 小时和下一个 UTC 日期的 13 小时。 您使用的是什么版本的 SQL-Server? 2016年有这个...docs.microsoft.com/en-us/sql/t-sql/queries/… 它的 SQL 2014,我不确定我们是否有这个。 【参考方案1】:我认为关键是首先将 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()))
【讨论】:
以上是关于从表中检索特定 24 小时时间范围内的记录的主要内容,如果未能解决你的问题,请参考以下文章
以字符串格式存储的 DynamoDB 时间戳属性,应检索指定时间戳范围内的记录