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

如何在SQL Server中从float类型十进制数计算总工时(时分)

解决SQL Server中float类型工时列的求和转换问题

现有旧表包含一个float类型的工时列,示例值如下:

2
5.3
7.45
0.5
0.3
2.05

需要按照以下逻辑计算总和并输出为18.40格式(整数部分为小时,小数部分为分钟):

  1. 小数部分统一转为两位后,按“小数部分×100=分钟数”规则转换,求和得到总分钟数;
  2. 整数部分直接求和得到总整数小时;
  3. 总分钟数转换为小时+剩余分钟,与总整数小时相加后,格式化为X.XX的形式。

实现SQL查询

假设表名为WorkHours,工时列名为Hours,可以用以下查询实现需求:

SELECT 
    CONCAT(
        total_hours + (total_minutes / 60),
        '.',
        RIGHT('0' + CAST(total_minutes % 60 AS VARCHAR), 2)
    ) AS total_work_hours
FROM (
    SELECT 
        SUM(FLOOR(ROUND(h.Hours, 2))) AS total_hours,
        SUM(CAST((ROUND(h.Hours, 2) - FLOOR(ROUND(h.Hours, 2))) * 100 AS INT)) AS total_minutes
    FROM WorkHours h
) AS calc

代码说明

  • ROUND(h.Hours, 2):将float类型的工时值统一转为两位小数,解决5.3存储为5.3而非5.30的格式问题,同时规避浮点精度误差;
  • FLOOR(ROUND(...)):提取每个工时的整数小时部分,求和得到总整数小时数;
  • (ROUND(...) - FLOOR(...)) * 100:将小数部分转换为对应分钟数(如0.3→30分钟、0.05→5分钟),通过CAST转为整数避免浮点计算偏差;
  • 外层查询将总分钟数拆分为可转换的小时数和剩余分钟数,拼接时用RIGHT('0' + ..., 2)保证分钟数为两位格式(如5分钟转为05),最终得到18.40这样的目标格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 09:27:49