2016-09-16 4 views
0

フィールドコストに値があります0.9878786564357986540.765656787898767 これはどのようなデータ型になるかを調べようとしています。小数値フィールドの算術オーバーフローエラー

私はdecimal 15,15を与え、それが誤り

算術オーバーフローエラーがデータ型の数値にvarchar型を変換する私を投げているデータをロードしようとしています。

答えて

2

問題は、の数値にの10進数の前に任意の長さを割り当てていないことです。

DECIMAL (15, 15)は、小数点以下15桁の精度を持ちますが、合計15桁の余裕があることを意味します。したがって、1より大きい値の余裕はありません。 -0.9999999999999990.999999999999999(10進数の後に15桁):

これはDECIMAL (15, 15)のみ以下の範囲の値をサポートすることを意味します。

あなたはあなたの最初の例では18数字を持っているので、範囲内の値をサポートしています私はDECIMAL (21, 18)

DECIMAL (21, 18)ようなものを使用することをお勧めします:-999.999999999999999999999.999999999999999999へ(小数点以下18桁)。

しかし、自分のデータを分析して、サポートする必要がある最大値を確認する必要があります。

+0

ありがとう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桁の10桁しかありません(通常、場合)。 – Andrew

+0

フィールド内のデータのMy Lenは14 13ですが、それでもエラーが発生します。私は何が間違っているのか分かりません。 助けてください? – swathi

0

Xは、LEN文で返されるものです
SELECT CONVERT(DECIMAL(X,X-1),YourColumn) 

...彼らは1を下回るたびにされている場合は、これを試して、その後

SELECT LEN(YourColumn) 
FROM YourTable 

...これを試してみてください。 X-1はそれより1小さい。

覚えておいてください、それはDECIMAL(TotalLength,Precision)なので、合計値に十分なスペースがあることを確認する必要があります。

関連する問題