模运算符,Binary % bigint 怎么做?

Modulo operator, how to do Binary % bigint?

MSDN says Modulo 的有效类型是

data types in the integer and monetary data type categories, or the numeric data type

BINARY 不在列表中,但我仍然可以

DECLARE 
  @a bigint = 1, 
  @b bigint = 2, 
  @bin binary(16)

SET @bin = cast(@a AS binary(8)) + cast(@b AS binary(8))

PRINT @bin % 2147483647

BIGINT 在列表中,但这不起作用:

PRINT @bin % 9223372036854775807

我的问题是,是否可以执行 BINARY % BIGINT?

在您的第二个示例中,SQL 服务器隐式地将 9223372036854775807 视为 numeric(十进制),因此 % 运算符不支持。

您只需要先将其转换为 bigint

DECLARE 
  @a bigint = 1, 
  @b bigint = 2, 
  @bin binary(16)

SET @bin = cast(@a AS binary(8)) + cast(@b AS binary(8))

PRINT @bin % 2147483647
PRINT @bin % CONVERT(bigint, 9223372036854775807)

[我认为]发生这种情况是因为 numeric (decimal) 的类型优先级高于 bigint.