SQL Server 2008R2のDECIMAL
(およびおそらくNUMERIC
)タイプについて質問があります。
MSDNによると:
(スケール)小数点の右側に格納できる小数点以下の最大桁数。スケールは0からpまでの値でなければなりません。
私はこれを次のように理解しています:
DECIMAL(10, 5)
がある場合-12345.12345または12345678.91を保存できます。DECIMAL(5, 5)
がある場合-12345または1234.5または1.2345などを使用できます。はっきりしていますか?
しかし、私はこのエラーメッセージを受け取りました:
_SELECT CAST(2.8514 AS DECIMAL(5,5))
_
数値をデータ型数値に変換する際の算術オーバーフローエラー。
5,5は、最大5桁、小数点以下5桁まで可能であることを意味すると思いました。
私が試したように:
_SELECT CAST(12.851 AS DECIMAL(6,5)) - overflows too
_
ただし
_SELECT CAST(1.23456 AS DECIMAL(6,5)) - is OK.
_
それで、真実は何ですか?
DECIMAL(a,b)
は、最大で1桁の数字を使用でき、そのうちのbだけが小数点の右側にある(残りのa-bは小数点の左側にある)と言っていますか?
どこにでもコピーされているドキュメントのステートメントについて、私は本当に混乱しています。少し時間を取って、この簡単なことを説明してください。
どうもありがとう!
(私にとって)それを考える最も簡単な方法は、精度は総桁数であり、そのうちスケールは小数点の右側の桁数です。したがって、DECIMAL(p,s)
は、ポイントの左側の_p-s
_桁、およびポイントの右側のs
桁を意味します。
これは、表示されているすべての変換エラーを説明しています。_2.8514
_は、_p-s = 0
_であるため、decimal(5,5)
にすることはできません。 _12.851
_などの理由で_p-s = 1
_をdecimal(6,5)
にすることはできません。