最近遇到的一些Bug
起因
最近遇到的两个Bug,觉得还是有必要记录下来的.- sql统计汇总一些数据求和时,遇到"将expression转化为数据类型int时发生算术溢出错误"
- 计算跨月的时候,没考虑到跨年.
sql数据类型溢出
简单的重现一下:DECLARE @val INT;
SELECT @val=2147483647; --int类型最大值
SELECT @val = @val+1;
汇总统计数据时,要考虑使用的类型,是不是会溢出.需不需要先进行类型转换.
DECLARE @val INT;
SELECT @val=2147483647; --int类型最大值
--SELECT @val = @val+1;
SELECT CAST(@val AS BIGINT)+10;
跨月计算,没考虑跨年
var startTime = new DateTime(2022,12,1);
var endTime = new DateTime(2023,2,1);
//计算是不是跨月(跨年时)
var months = endTime.Month - startTime.Month;
Console.WriteLine(months); //计算得出的结果: -10
这样计算在跨年,计算的结果是没有问题的.
var startTime = new DateTime(2022,12,1);
var endTime = new DateTime(2023,2,1);
//正确的计算方式为: 结束时间的总月数 - 开始时间的总月数
var month = (endTime.Year * 12 + endTime.Month) - (startTime.Year * 12 + startTime.Month);
Console.WriteLine($"跨:{month}个月");
秋风
2023-02-05