2015-08-06 2 views
0

MSDN says что допустимые типы для Modulo являютсяОператор Modulo, как сделать двоичный% bigint?

типов данных в целочисленных и монетарных типах данных категорий, или числовой тип данных

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?

ответ

0

В вашем втором примере 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.

+0

Да, это работает. Спасибо. Это противоречиво, почему оно преобразует max bigint в числовое. – Alsin

Смежные вопросы