Ошибка арифметического переполнения для типа 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 ,

Другие вопросы по тегам