Sql Java Int溢出逻辑

Sql Java Int溢出逻辑,sql,sql-server,math,Sql,Sql Server,Math,我试图在SQL Server 2016中复制Java int溢出/下溢逻辑。逻辑是什么: (a * b) + c 其中a、b和c的范围为-2147483648到2147483648—SQL中int的范围 例如,在java中,如果计算135*12+2147483647,结果是-2147482029。在SQL中,对于int,它将出现溢出错误。我需要在SQL中复制java溢出/下溢逻辑,这样它也能工作,并生成一个int。我找到了答案 declare @result bigint set @resu

我试图在SQL Server 2016中复制Java int溢出/下溢逻辑。逻辑是什么:

(a * b) + c
其中a、b和c的范围为-2147483648到2147483648—SQL中int的范围

例如,在java中,如果计算135*12+2147483647,结果是-2147482029。在SQL中,对于int,它将出现溢出错误。我需要在SQL中复制java溢出/下溢逻辑,这样它也能工作,并生成一个int。

我找到了答案

declare @result bigint

set @result = ((@a* @b) + @c) % 4294967296
IF @result >= 2147483648 SET @result = @result - 4294967296
IF @result < -2147483648 SET @result = @result + 4294967296

看一看。有什么区别吗?请注意,请确保接受的答案是否有用,因为我怀疑SQL是否具有相同的按位操作。Guava的IntMath类提供了名为之类的方法,如果发生溢出,会引发异常。为什么要从Java将代码移植到SQL Server?他们通常不被认为是相似的。如果这是从Oracle java存储过程中,那么你可能想考虑使用CLR过程,其中C在这方面与java有类似的行为,尽管你不应该使用CLR,如果这是你移植的整个java块。