web-dev-qa-db-ja.com

SQL Serverの10進スケールの長さ-可能であるか、そうである必要がありますか?

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は小数点の左側にある)と言っていますか?

どこにでもコピーされているドキュメントのステートメントについて、私は本当に混乱しています。少し時間を取って、この簡単なことを説明してください。

どうもありがとう!

16
Jan Drozen

(私にとって)それを考える最も簡単な方法は、精度は総桁数であり、そのうちスケールは小数点の右側の桁数です。したがって、DECIMAL(p,s)は、ポイントの左側の_p-s_桁、およびポイントの右側のs桁を意味します。

これは、表示されているすべての変換エラーを説明しています。_2.8514_は、_p-s = 0_であるため、decimal(5,5)にすることはできません。 _12.851_などの理由で_p-s = 1_をdecimal(6,5)にすることはできません。

21
Pondlife