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

SQL如何计算表中所有行两个时间列的差值并汇总总时长

解决方法

核心思路

逐行计算resumetime与pausetime的时间差后求和,优先使用DATEDIFF函数计算差值避免跨天场景出错。

具体实现

1. 直接查询总间隔数值(按需选择时间单位)

你可以根据精度需求选择秒、毫秒作为计算单位:

SELECT
  -- 总间隔秒数,不需要毫秒精度可以只保留这个字段
  SUM(DATEDIFF(SECOND, pausetime, resumetime)) AS total_duration_second,
  -- 总间隔毫秒数,需要高精度时使用
  SUM(DATEDIFF(MILLISECOND, pausetime, resumetime)) AS total_duration_ms
FROM 替换为你的实际表名;

2. 转换为易读的时分秒格式

如果需要把总时长格式化为X小时X分钟X秒的可读格式,可以用变量先存总差值再格式化:

DECLARE @total_ms BIGINT
-- 先计算所有行的总间隔毫秒数
SELECT @total_ms = SUM(DATEDIFF(MILLISECOND, pausetime, resumetime))
FROM 替换为你的实际表名;

-- 格式化输出
SELECT
  CAST(@total_ms / 3600000 AS VARCHAR) + '小时' +
  CAST((@total_ms % 3600000) / 60000 AS VARCHAR) + '分钟' +
  CAST((@total_ms % 60000) / 1000 AS VARCHAR) + '秒' +
  CAST(@total_ms % 1000 AS VARCHAR) + '毫秒' AS 总暂停时长

原写法问题说明

  1. 将datetime类型强制转为time类型会丢失日期信息,若暂停和恢复时间跨天会得到完全错误的差值
  2. 没有使用SUM聚合函数对所有行的差值做汇总,自然无法得到所有行的总间隔

内容的提问来源于stack exchange,提问作者Ankush yadav

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 22:45:05