Redshift中如何将整数秒值转换为HH:MM格式的小时结果?
Redshift 整数秒字段转HH:MM格式实现方案
针对存储整数秒的Seconds字段,根据业务是否需要支持24小时以上的累计时长,有两种成熟实现方式:
方案1:秒数范围小于86400(即总时长不超过24小时)
直接用Redshift内置时间类型转换+格式化函数实现,写法最简洁:
SELECT Seconds, TO_CHAR( '00:00:00'::TIME + Seconds * INTERVAL '1 second', 'HH24:MI' ) AS hh_mm_result FROM 你的表名;
针对你给出的示例值,转换结果如下:
- 345秒 → 00:05
- 456秒 → 00:07
- 234秒 → 00:03
- 456秒 → 00:07
- 678秒 → 00:11
- 3456秒 → 00:57
方案2:秒数可能超过86400(需显示累计小时数,不按天取模)
如果总时长可能超过24小时(比如90000秒=25小时,需要显示为25:00而非01:00),直接做数值计算拼接更稳妥,不会出现时间截断问题:
SELECT Seconds, LPAD((Seconds // 3600)::VARCHAR, 2, '0') || ':' || LPAD(((Seconds % 3600) // 60)::VARCHAR, 2, '0') AS hh_mm_result FROM 你的表名;
逻辑说明:
Seconds // 3600:整除3600得到总小时数,用LPAD自动补前导零,保证小时位固定2位长度Seconds % 3600:取模得到扣除整小时后剩余的秒数,再整除60得到对应分钟数,同样补前导零到2位- 两段结果用冒号拼接即为标准HH:MM格式
补充说明:如果业务要求分钟位按秒数四舍五入(剩余秒数≥30则分钟进1),可以把分钟计算逻辑替换为
ROUND((Seconds % 3600)/60.0)::INT,额外处理下分钟进位到60时的小时累加逻辑即可。
内容的提问来源于stack exchange,提问作者Sunst
相关产品推荐
相关产品推荐

