模运算符,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
.
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
.