Ошибка арифметического переполнения для типа int, значение = 4957500001.400178
Я знаю, что подобные вопросы задавались снова в прошлом, но я думаю, что мой случай немного отличается. У меня есть столбец, который имеет логарифмические значения, и я пытаюсь инвертировать их, используя следующую формулу:SELECT POWER(10,CAST(9.695262723 AS NUMERIC(30,15)))
Скажем значение 9.695262723
является одним из значений этого столбца. При попытке выполнить этот запрос я получаю Arithmetic overflow error for type int, value = 4957500001.400178
,
С другой стороны, тот же запрос отлично работает для меньших значений, например SELECT POWER(10,CAST(8.662644523 AS NUMERIC(30,15)))
Как я могу преодолеть эту ошибку и вычислить обратные значения записей log10, которые у меня есть? Просто для информации, большее значение, которое существует в таблице (в масштабе log10) 12.27256096
,
1 ответ
Проблема здесь - ваш первый входной параметр (10
) какой SQL-сервер по умолчанию будет обрабатываться как тип данных int
, int
имеет максимальное значение 2^31-1 (2 147 483 647), а число 4 957 500 001 намного больше этого значения, поэтому необходимо использовать bigint
:
SELECT POWER(CONVERT(bigint,10),CONVERT(numeric(30,15),9.695262723));
Изменить: Если вам нужно сохранить десятичные разряды, то используйте numeric
с достаточно большим масштабом и точностью, вместо bigint
,