获取当天的 UTC 日期和时间,并将其差异添加到 UTC 时间戳

问题描述 投票:0回答:1

我有这样的疑问:

SELECT *
FROM mytable fact
JOIN time_table time ON ( time.time_5_min_utc = fact.event_5_min_utc )
WHERE fact.event_utc >= ${fromTimestamp}
  AND fact.event_utc < ${toTimestamp} 
  AND time.time_5_min_utc >= ${fromTimestamp} 
  AND time.time_5_min_utc < ${toTimestamp}

我总是知道 UTC 中的 fromTimestamp。

我现在想要的是为 toTimestamp 添加值以获得一天的结束时间。

类似:

SELECT *
FROM mytable fact
JOIN time_table time ON ( time.time_5_min_utc = fact.event_5_min_utc )
WHERE fact.event_utc >= ${fromTimestamp}
  AND fact.event_utc < ${toTimestamp} + 86400000
  AND time.time_5_min_utc >= ${fromTimestamp} 
  AND time.time_5_min_utc < ${toTimestamp} + 86400000

这应该将 86400000 添加到 toTimestamp 但我得到的是 +24h。 应该是当天结束时间 23:59:59。

我怎样才能做到这一点?

sql impala
1个回答
0
投票

我找到了解决这个问题的方法,我想分享我的解决方案。

CAST (
       to_utc_timestamp (
                 date_add (
                     date_add (
                         date_trunc (
                             'day',
                             CAST (
                                   CAST (
                                       ${toTimestamp} AS DECIMAL (30, 0))
                                 / 1000
                                     AS TIMESTAMP)),
                         1),
                       interval
                     - 1 seconds),
                 'Asia/Jerusalem')
                 AS BIGINT)
       * 1000

说明:
首先,'toTimestamp 被转换为十进制,以便之后能够将其转换为时间戳。当它是时间戳时,可以提取它的日期,然后减去 1 秒以获得 23:59:59 之前的日期。然后将其转换回具有正确时区的 UTC 时间戳。最后将其转换回数字并乘以 1000 以获得以毫秒为单位的 UTC 时间戳。

© www.soinside.com 2019 - 2024. All rights reserved.