如何在Athena/Presto中将时间差转换为DD HH MM格式?
在Athena/Presto中实现时间差格式化(DD HH MM)
直接通过算术运算拆分总分钟数,再拼接成目标格式即可,以下是完整SQL示例:
SELECT id, time_1, time_2, date_diff('minute', time_1, time_2) AS "datediff(minutes)", CONCAT( FLOOR(date_diff('minute', time_1, time_2) / (24 * 60)), 'd ', FLOOR(MOD(date_diff('minute', time_1, time_2), 24 * 60) / 60), 'h ', MOD(date_diff('minute', time_1, time_2), 60), 'm' ) AS "time difference" FROM your_table_name;
逻辑说明:
- 天数计算:总分钟数除以每天的分钟数(24*60),用
FLOOR取整数部分得到天数 - 小时计算:先取总分钟数除以每天分钟数的余数(即当天内的剩余分钟),再除以60得到小时数
- 分钟计算:取剩余分钟数除以60的余数,得到最终的分钟部分
- 拼接格式:用
CONCAT把各部分按Xd Xh Xm的格式组合,自动适配0值(比如0天会显示0d)
如果担心重复计算date_diff影响效率,可以用子查询或CTE先算出总分钟数:
WITH time_diff_cte AS ( SELECT id, time_1, time_2, date_diff('minute', time_1, time_2) AS total_minutes FROM your_table_name ) SELECT id, time_1, time_2, total_minutes AS "datediff(minutes)", CONCAT( FLOOR(total_minutes / (24 * 60)), 'd ', FLOOR(MOD(total_minutes, 24 * 60) / 60), 'h ', MOD(total_minutes, 60), 'm' ) AS "time difference" FROM time_diff_cte;
内容的提问来源于stack exchange,提问作者KaraiKare
相关产品推荐
相关产品推荐

