我的表有 2 列时间戳。我的目标是获得这 2 个时间戳列之间的差异,但格式应该是 DD HH MM。
使用 date_diff 函数,我可以得到以分钟为单位的时差,但我不知道下一步该做什么。我想要的是如下表:
身份证 | 时间1 | 时间2 | 日期差异(分钟) | 时差 |
---|---|---|---|---|
A | 2023-06-01 07:30:12 | 2023-06-12 10:31:54 | 16021 | 11天3小时1米 |
B | 2023-06-01 09:30:45 | 2023-06-01 10:31:50 | 61 | 0天1小时1米 |
知道如何在 Athena/Presto 中做到这一点吗?谢谢你的帮助
您可以减去两个日期,得到
interval day to second
,然后“手动”格式化:
-- sample data
WITH dataset (id, Time1, Time2) AS (
values
('A', timestamp '2023-06-01 07:30:12', timestamp '2023-06-12 10:31:54'),
('B', timestamp '2023-06-01 09:30:45', timestamp '2023-06-01 10:31:50')
)
-- query
select *,
date_diff('minute', time1, time2) "datediff(minutes)",
cast(day(Time2 - Time1) as varchar) || 'd ' || cast(hour(Time2 - Time1) as varchar) || 'd ' || cast(minute(Time2 - Time1) as varchar) || 'm'
from dataset;
输出:
id | 时间1 | 时间2 | 日期差异(分钟) | _col4 |
---|---|---|---|---|
A | 2023-06-01 07:30:12 | 2023-06-12 10:31:54 | 16021 | 11d 3d 1m |
B | 2023-06-01 09:30:45 | 2023-06-01 10:31:50 | 61 | 0d 1d 1m |