Арифметическое переполнение с bigints в SQL Server 2008 - PullRequest
6 голосов
/ 14 декабря 2010

У меня проблема с арифметическим переполнением при преобразовании в bigint в SQL Server 2008. Меня смущает следующее.

Это работает:

select 58356453 * 228204732751

Ответ: 13317218761161292203

Но все остальные попытки, связанные с явным преобразованием, заканчиваются неудачей.

select convert(bigint, 58356453 * 228204732751)

результат: арифметическое переполнение

begin 
    declare @key bigint = 58356453,
        @workingVal bigint,
        @primeMultiplier1 bigint = 228204732751;
    set @workingVal = @key * @primeMultiplier1;
end;

результат: арифметическое переполнение

Что яздесь не хватает?Я также пробовал «приведение (BigNumber как bigint)» (не думаю, что оно отличается от преобразования) и различные комбинации преобразования до / после арифметических операций.

И это на Windows Server 200864

Ответы [ 2 ]

2 голосов
/ 14 декабря 2010

Максимальное значение для bigint составляет

9223372036854775807

вы возвращаете

13317218761161292203.

Я предлагаю кастингс десятичной дробью, которая имеет достаточную точность.

0 голосов
/ 14 декабря 2010

Вы должны использовать числовой тип данных .

select cast(13317218761161292203 as numeric(38))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...