Ошибка арифметического переполнения для типа int, значение = 4957500001.400178 - PullRequest
0 голосов
/ 13 июня 2018

Я знаю, что подобные вопросы задавались снова в прошлом, но я думаю, что мой случай немного отличается.У меня есть столбец с логарифмическими значениями, и я пытаюсь инвертировать их, используя следующую формулу: 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 Ответ

0 голосов
/ 13 июня 2018

Проблема здесь в том, что ваш первый входной параметр (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.

...