Pentaho中HH:mm:ss格式STRING类型时长如何转INT后求和得分钟数
时长字符串(HH:mm:ss)求和转分钟方案
核心逻辑
- 把HH:mm:ss格式的字符串按冒号拆分,提取小时、分钟、秒三个部分的数值
- 按 小时×60 + 分钟 + 秒÷60 的规则,将单条时长转换为分钟单位的数值
- 对所有行的分钟数值求和得到最终结果
不同场景实现代码
场景1:SQL环境
假设时长字段名为duration_str,表名为your_table:
兼容超过24小时时长的通用写法(字符串拆分)
SELECT SUM( CAST(SUBSTRING_INDEX(duration_str, ':', 1) AS UNSIGNED) * 60 + CAST(SUBSTRING_INDEX(SUBSTRING_INDEX(duration_str, ':', 2), ':', -1) AS UNSIGNED) + CAST(SUBSTRING_INDEX(duration_str, ':', -1) AS UNSIGNED) / 60 ) AS total_minutes FROM your_table;
MySQL 时间函数写法(仅适用于时长小于24小时的场景)
SELECT SUM( HOUR(STR_TO_DATE(duration_str, '%H:%i:%s')) * 60 + MINUTE(STR_TO_DATE(duration_str, '%H:%i:%s')) + SECOND(STR_TO_DATE(duration_str, '%H:%i:%s')) / 60 ) AS total_minutes FROM your_table;
场景2:Python Pandas环境
假设DataFrame名为df,时长列名为duration_str:
import pandas as pd # 方法1:内置时间类型转换(支持超过24小时的时长) df['duration_min'] = pd.to_timedelta(df['duration_str']).dt.total_seconds() / 60 total_minutes = df['duration_min'].sum() # 方法2:字符串拆分计算 df[['h', 'm', 's']] = df['duration_str'].str.split(':', expand=True).astype(int) df['duration_min'] = df['h'] * 60 + df['m'] + df['s'] / 60 total_minutes = df['duration_min'].sum()
场景3:Excel环境
假设时长数据存放在A列,从A2行开始:
- 在B2单元格输入公式:
=HOUR(TIMEVALUE(A2))*60 + MINUTE(TIMEVALUE(A2)) + SECOND(TIMEVALUE(A2))/60 - 下拉B2单元格公式,应用到所有时长对应的行
- 对B列所有数值求和即可得到总分钟数
注意事项
- 若存在超过24小时的时长(如
36:05:20),避免使用时间类转换函数,优先用字符串拆分的方法处理,避免转换报错 - 若需要整数结果,对最终求和结果使用ROUND、INT类取整函数处理即可
内容的提问来源于stack exchange,提问作者carbassot
相关产品推荐
相关产品推荐

