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

MySQL中SUM VARCHAR类型时分字段转Decimal求和异常解决

解决时间格式字符串求和时小数部分丢失的问题

你遇到的问题根源很明确:直接把带冒号的hh:mm格式字符串转成decimal时,数据库会自动截断冒号后的非数字部分,只保留前面的整数小时,导致分钟对应的小数部分完全被忽略,自然求和结果就不对了。

要正确计算总和,我们需要先把这种时间字符串转换成对应的十进制小时数(比如把2:30转换成2.5),再进行求和。具体实现如下:

解决方案SQL语句(以MySQL为例)

SELECT 
  SUM(
    -- 提取冒号前的小时部分并转为数值
    CAST(SUBSTRING_INDEX(total, ':', 1) AS DECIMAL(10,2)) + 
    -- 提取冒号后的分钟部分,转为数值后除以60得到小时的小数形式
    CAST(SUBSTRING_INDEX(total, ':', -1) AS DECIMAL(10,2)) / 60
  ) AS tudo 
FROM your_table_name;

针对其他数据库的适配(比如SQL Server)

如果你的数据库是SQL Server,可以用CHARINDEX、LEFT和RIGHT函数拆分字符串:

SELECT 
  SUM(
    CAST(LEFT(total, CHARINDEX(':', total) - 1) AS DECIMAL(10,2)) + 
    CAST(RIGHT(total, LEN(total) - CHARINDEX(':', total)) AS DECIMAL(10,2)) / 60
  ) AS tudo 
FROM your_table_name;

效果验证

用这个方法计算你给出的示例数据:

  • 5:00 → 5 + 0/60 = 5.00
  • 2:30 → 2 + 30/60 = 2.50
  • 5:00 → 5 + 0/60 = 5.00

最终总和为5.00 + 2.50 + 5.00 = 12.50(这里注意你提到的预期结果是12.30,大概率是笔误,实际正确的总和应该是12.50)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:24:36