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

如何实现两个时间量相加?使用dateadd未成功,请求技术支持

解决时间量相加问题

这类time类型的时间量直接用+运算符相加确实不被支持,DATEADD函数是给日期/时间点添加时间间隔,而非对两个时间段做加法。以下提供两种可行的实现方案(以SQL Server为例):

方案1:转换为微秒总数计算后转回time类型

将两个time值转换为从0点开始的微秒总数,相加后再转换回time类型,代码如下:

DECLARE @time1 time(7) = '01:52:00.0000000';
DECLARE @time2 time(7) = '00:59:00.0000000';

SELECT CAST(
    DATEADD(MICROSECOND, 
        DATEDIFF(MICROSECOND, '00:00:00.0000000', @time1) + 
        DATEDIFF(MICROSECOND, '00:00:00.0000000', @time2), 
        '00:00:00.0000000'
    ) AS time(7)
) AS Result;

执行后会得到预期结果 02:51:00.0000000。

方案2:拆分时分秒微秒分别计算进位

手动拆分两个时间的时、分、秒、微秒部分,分别相加后处理进位逻辑,代码如下:

DECLARE @t1 time(7) = '01:52:00.0000000';
DECLARE @t2 time(7) = '00:59:00.0000000';

-- 拆分各时间分量
DECLARE @h1 INT = DATEPART(HOUR, @t1), @h2 INT = DATEPART(HOUR, @t2);
DECLARE @m1 INT = DATEPART(MINUTE, @t1), @m2 INT = DATEPART(MINUTE, @t2);
DECLARE @s1 INT = DATEPART(SECOND, @t1), @s2 INT = DATEPART(SECOND, @t2);
DECLARE @ms1 INT = DATEPART(MICROSECOND, @t1), @ms2 INT = DATEPART(MICROSECOND, @t2);

-- 处理微秒进位
DECLARE @total_ms INT = @ms1 + @ms2;
DECLARE @carry_s INT = @total_ms / 1000000;
SET @total_ms = @total_ms % 1000000;

-- 处理秒进位
DECLARE @total_s INT = @s1 + @s2 + @carry_s;
DECLARE @carry_m INT = @total_s / 60;
SET @total_s = @total_s % 60;

-- 处理分进位
DECLARE @total_m INT = @m1 + @m2 + @carry_m;
DECLARE @carry_h INT = @total_m / 60;
SET @total_m = @total_m % 60;

-- 计算总小时
DECLARE @total_h INT = @h1 + @h2 + @carry_h;

-- 拼接并转换为time类型
SELECT CAST(
    CONCAT(
        RIGHT('0' + CAST(@total_h AS VARCHAR), 2), ':',
        RIGHT('0' + CAST(@total_m AS VARCHAR), 2), ':',
        RIGHT('0' + CAST(@total_s AS VARCHAR), 2), '.',
        RIGHT('000000' + CAST(@total_ms AS VARCHAR), 6)
    ) AS time(7)
) AS Result;

该方案逻辑直观,适合理解时间相加的底层进位规则,结果与方案1一致。

注意事项

如果相加后的总时长超过24小时,time类型会自动对24取模(例如25小时会显示为01:00:00.0000000)。若需保留超过24小时的完整时长,建议改用DATETIME类型存储,或单独记录总小时、分钟数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 15:20:24