You need to enable JavaScript to run this app. numeric(4,2)类型时长四舍五入到最近15分钟间隔的实现方案
优惠活动
大模型
产品
解决方案
定价
更多

numeric(4,2)类型时长四舍五入到最近15分钟间隔的实现方案

针对numeric(4,2)存储时长的15分钟间隔四舍五入方案

问题本质

你此前的写法错误原因是直接将存储值按普通十进制数值计算,忽略了当前的存储规则:数值整数部分为小时数,小数后两位为分钟数,而非十进制的小时小数单位,比如2.12代表2小时12分钟,不是2.12小时。

实现逻辑

  • 先将存储的numeric(4,2)值转换为总分钟数,统一计算单位
  • 对总分钟数做15间隔的四舍五入
  • 将四舍五入后的总分钟数转换为你要求的季度展示格式(15分钟=0.25,30分钟=0.5,45分钟=0.75)

分步计算示例(以输入值2.12为例)

  • 转总分钟:2 * 60 + 12 = 132 分钟
  • 15间隔四舍五入:ROUND(132 / 15, 0) * 15 = 135 分钟
  • 转季度格式:FLOOR(135/60) + (135 % 60)/60 = 2 + 0.25 = 2.25,和预期结果一致

SQL 实现代码(适配SQL Server语法,和你此前使用的语法兼容)

-- 替换@duration为你的时长字段即可
DECLARE @duration NUMERIC(4,2) = 2.12
-- 转总分钟
DECLARE @total_min INT = FLOOR(@duration) * 60 + CAST(ROUND((@duration - FLOOR(@duration)) * 100, 0) AS INT)
-- 四舍五入到15分钟间隔
DECLARE @rounded_min INT = ROUND(@total_min / 15.0, 0) * 15
-- 转换为要求的输出格式
SELECT CONVERT(NUMERIC(4,2), FLOOR(@rounded_min / 60.0) + (@rounded_min % 60) / 60.0) AS rounded_duration

测试用例验证

输入值预期含义四舍五入后输出
1.071小时7分1.25
3.283小时28分3.50
0.580小时58分1.00

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 11:09:03