2016-09-16 3 views
0

У меня есть стоимость поля со значениями 0.987878656435798654, 0.765656787898767 Я пытаюсь выяснить, какой будет тип данных для этого.Ошибка арифметического переполнения в десятичном поле

Когда я даю decimal 15,15 и пытаюсь загрузить данные, которые он бросает мне ошибку

Ошибку арифметического переполнения преобразовывая VARCHAR к типу данных числовому.

ответ

2

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

DECIMAL (15, 15) означает, что он имеет точность в 15 цифр после десятичного знака, но всего достаточно места на 15 цифр, что не оставляет места для значений больше 1.

Это означает, что DECIMAL (15, 15) поддерживает только значение в следующем диапазоне: -0.999999999999999 до 0.999999999999999 (15 цифр после запятой).

Вы 18 цифры в первом примере, так что я рекомендовал бы использовать что-то вроде DECIMAL (21, 18)

DECIMAL (21, 18) будет поддерживать значения в диапазоне от: -999.999999999999999999 до 999.999999999999999999 (18 знаков после запятой).

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

+0

Thank You Siyual. Это сработало. – swathi

+0

Если вы специально не хотите больше десятичных знаков, имейте в виду, что от 10 до 19 цифр поле использует 9 байт, а от 20 до 28 оно использует 13, поэтому вы можете использовать 'DECIMAL (28,25)' (для пример), получая более высокую точность с тем же количеством байтов хранения (источник: https://msdn.microsoft.com/en-us/library/ms187746.aspx). Вы также можете рассмотреть возможность использования типов денег: https://msdn.microsoft.com/en-us/library/ms179882.aspx, хотя он имеет только до 4 десятичных цифр (обычно более чем достаточно для денег, может быть, не ваших дело). – Andrew

+0

My Len данных в полевых условиях 14 13 и я все еще получаю эту ошибку. Я не уверен, что я делаю неправильно. Любая помощь, пожалуйста? – swathi

0

Попробуйте это ...

SELECT LEN(YourColumn) 
FROM YourTable 

Тогда, если они ниже 1 каждый раз, попробуйте это ...

SELECT CONVERT(DECIMAL(X,X-1),YourColumn) 

Где X это то, что возвращается в заявлении LEN , и X-1 меньше этого.

Помните, что это DECIMAL(TotalLength,Precision), поэтому вам нужно убедиться, что у вас достаточно места для общей стоимости.

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