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

MariaDB中SUM时间求和上限为838:59:59的原因咨询

问题原因及解决办法

这是MariaDB中TIME类型的取值范围限制导致的——TIME类型的最大值固定为838:59:59,当你用SEC_TO_TIME()把累计的秒数转换为TIME类型时,只要总秒数超过3020399(即8383600+5960+59),结果就会被截断到这个最大值,所以大数据量时总是得到838:59:59。

另外你SQL里还有个小问题:GROUP_BY 'category'用了单引号,这会把'category'当成字符串常量,导致所有数据都被分到同一个分组里,应该改成GROUP BY category(如果列名不是保留字)或者GROUP BY \category``。

解决办法

不要用TIME类型存储超长时长,直接计算并展示为字符串格式的时长即可:

方案1:基础版拼接时长

SELECT 
    category,
    CONCAT(
        FLOOR(SUM(TIME_TO_SEC(TIMEDIFF(ter_ura_zakljucek, ter_ura_zacetek))) / 3600),
        ':',
        FLOOR((SUM(TIME_TO_SEC(TIMEDIFF(ter_ura_zakljucek, ter_ura_zacetek))) % 3600) / 60),
        ':',
        SUM(TIME_TO_SEC(TIMEDIFF(ter_ura_zakljucek, ter_ura_zacetek))) % 60
    ) AS total_time
FROM your_table_name -- 补充你的表名
GROUP BY category;

方案2:补零优化版(规范时分秒格式)

如果需要123:05:08这种带前导零的规范格式,可以嵌套子查询先计算总秒数,再格式化:

SELECT 
    category,
    CONCAT(
        FLOOR(total_sec / 3600),
        ':',
        LPAD(FLOOR((total_sec % 3600) / 60), 2, '0'),
        ':',
        LPAD(total_sec % 60, 2, '0')
    ) AS total_time
FROM (
    SELECT 
        category,
        SUM(TIME_TO_SEC(TIMEDIFF(ter_ura_zakljucek, ter_ura_zacetek))) AS total_sec
    FROM your_table_name -- 补充你的表名
    GROUP BY category
) AS sub_query;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 10:10:31