如何在PSQL中计算拆分存储为多列的HH:MM格式时间总差值
PostgreSQL计算订单总耗时解决方案
你原有语句报错的核心原因是PostgreSQL的字符串拼接运算符为||,而非&,两种可行的实现方案如下:
方案1:按你原思路转换为时间类型计算
SELECT SUM( -- 计算时间差换算为秒后转小时,累加求和 EXTRACT(EPOCH FROM ( (Finish_Hour::TEXT || ':' || Finish_Minute::TEXT)::TIME - (Start_Hour::TEXT || ':' || Start_Minute::TEXT)::TIME )) / 3600 ) AS total_hours FROM OrderDetails -- Order是PostgreSQL保留字,需加双引号引用 WHERE "Order" = 10;
逻辑说明:先将数字类型的时分转字符串拼接为HH:MM格式,再转时间类型求差值得到interval,提取秒数除以3600转小时后累加,最终得到总时长。
方案2:直接数值计算(性能更优,无需类型转换)
SELECT SUM( -- 统一转成当日总分钟数相减得到单段时长 (Finish_Hour * 60 + Finish_Minute) - (Start_Hour * 60 + Start_Minute) ) / 60.0 AS total_hours FROM OrderDetails WHERE "Order" = 10;
逻辑说明:跳过时间类型转换,直接把小时换算为分钟求和,两段分钟数差值累加后除以60转小时,结果同样为预期的5小时。
内容的提问来源于stack exchange,提问作者Senbee Norimaki
相关产品推荐
相关产品推荐

