You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 03:18:03