整数格式时间间隔分钟数计算问题:14300000与23000000
整数格式时间间隔分钟数计算问题
现有两个整数格式的时间值:开始时间14300000(对应14:30:00)、结束时间23000000(对应23:00:00),需要计算两者之间的总分钟数,期望结果为510,但使用以下SQL计算得到的结果是522:
Select Cast(((23000000-14300000)/1000000)*60 as Decimal(6,2)) Hours
问题原因
原SQL的逻辑错误在于将整数格式的时间当作纯十进制数值处理:
- 计算差值
23000000-14300000=8700000,除以1000000得到8.7,再乘以60得到522。 - 但实际上
14300000代表的是14小时30分钟,而非14.3小时;23000000代表23小时0分钟,而非23.0小时。直接按数值比例转换会混淆时间的60进制规则,导致结果错误。
正确计算方法
需要先将整数时间拆解为小时和分钟,转换为总分钟数后再求差值:
方法1:通过字符串拆分处理
SELECT ( -- 结束时间转总分钟数:23*60 + 0 = 1380 (CAST(LEFT(CAST(23000000 AS VARCHAR), 2) AS INT)*60 + CAST(SUBSTRING(CAST(23000000 AS VARCHAR), 3, 2) AS INT)) - -- 开始时间转总分钟数:14*60 +30 = 870 (CAST(LEFT(CAST(14300000 AS VARCHAR), 2) AS INT)*60 + CAST(SUBSTRING(CAST(14300000 AS VARCHAR), 3, 2) AS INT)) ) AS total_minutes;
方法2:通过数值运算处理(避免字符串转换)
SELECT ( -- 结束时间总分钟数 ((23000000 / 1000000)*60 + (23000000 / 10000) % 100) - -- 开始时间总分钟数 ((14300000 / 1000000)*60 + (14300000 / 10000) % 100) ) AS total_minutes;
两种方法都会得到正确结果510。
内容的提问来源于stack exchange,提问作者ALC
相关产品推荐
相关产品推荐

