有没有办法将时间戳向上或向下舍入到最接近的 30 分钟间隔?

Is there a way to round a timestamp up or down to the nearest 30 minute interval?

我目前正在使用 Presto,我想知道如何将时间戳向上或向下舍入到最接近的 30 分钟间隔?

这是我的时间戳: 2021-08-23 17:46:06

这就是我想要的样子: 2021-08-23 18:00

提前致谢!

四舍五入 - 取处理后的日期,加上 30 分钟减去精度(如果是分钟,则为 1 分钟,如果是秒,则为 1 秒,依此类推),然后取一些“基准”日期('2021-01-01' 在我的测试数据的情况下),以分钟为单位找到差异,然后除以 30 再乘以 30,然后将结果加回到基准日期,基本上是将修改日期向下舍入。不增加 30 分钟,四舍五入的方式相同:

WITH dataset(time) AS (
   VALUES 
  (timestamp '2021-08-23 17:29:59'),
  (timestamp '2021-08-23 17:30:00'),
  (timestamp '2021-08-23 17:30:01'),
  (timestamp '2021-08-23 17:31:01'),
  (timestamp '2021-08-23 17:59:59'),
  (timestamp '2021-08-23 18:00:00'),
  (timestamp '2021-08-23 18:00:01')
 ) 
 
SELECT date_add(
  'minute', 
  date_diff(
    'minute',
    timestamp '2021-01-01', -- "base" date
    (time + interval '30' minute - interval '1' second) -- remove the +/- interval parts to round down
  ) / 30 * 30, 
  timestamp '2021-01-01') -- "base" date
FROM dataset

输出:

_col0
2021-08-23 17:30:00.000
2021-08-23 17:30:00.000
2021-08-23 18:00:00.000
2021-08-23 18:00:00.000
2021-08-23 18:00:00.000
2021-08-23 18:00:00.000
2021-08-23 18:30:00.000