最近遇到的一些Bug

起因

最近遇到的两个Bug,觉得还是有必要记录下来的.
  1. sql统计汇总一些数据求和时,遇到"将expression转化为数据类型int时发生算术溢出错误"
  2. 计算跨月的时候,没考虑到跨年.

sql数据类型溢出

简单的重现一下:
DECLARE @val INT;
SELECT @val=2147483647;  --int类型最大值
SELECT @val = @val+1;

在SqlServer汇总统计一些数据时,出现算术溢出

汇总统计数据时,要考虑使用的类型,是不是会溢出.需不需要先进行类型转换.

DECLARE @val INT;
SELECT @val=2147483647;  --int类型最大值
--SELECT @val = @val+1;
SELECT CAST(@val AS BIGINT)+10;

在SqlServer汇总统计一些数据时,出现算术溢出,进行类型转换

跨月计算,没考虑跨年

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