【发布时间】:2021-11-12 19:02:58
【问题描述】:
我目前正在使用 Presto,我想知道如何将时间戳向上或向下舍入到最接近的 30 分钟间隔?
这是我的时间戳的样子: 2021-08-23 17:46:06
这就是我想要的样子: 2021-08-23 18:00
提前非常感谢!
【问题讨论】:
我目前正在使用 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 |
【讨论】: