【问题标题】:Retrieving records from a table for a specific 24 hour time frame从表中检索特定 24 小时时间范围内的记录
【发布时间】: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,我不确定我们是否有这个。

标签: sql sql-server datetime


【解决方案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()))

【讨论】:

    猜你喜欢
    • 2015-04-22
    • 2017-06-10
    • 2020-07-28
    • 2015-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-05
    • 2020-10-06
    相关资源
    最近更新 更多