我正在尝试在SQL(SQL Server 2016)中复制Java int上溢/下溢逻辑。逻辑是什么:
(a * b) + c
其中a,b和c的范围可以是-2147483648至2147483648(SQL中int的范围)
例如,在Java中,如果您计算(135 * 12)+ 2147483647,则结果为-2147482029。在SQL中,对于int而言,它会因溢出而出错。我需要在SQL中复制Java上溢/下溢逻辑,因此它可以相同地工作并产生一个整数。
答案 0 :(得分:0)
我知道了
declare @result bigint
set @result = ((@a* @b) + @c) % 4294967296
IF @result >= 2147483648 SET @result = @result - 4294967296
IF @result < -2147483648 SET @result = @result + 4294967296