web-dev-qa-db-ja.com

SQL Serverがintを数値データ型に変換する算術オーバーフローエラーをスローする理由

このコードを実行するとSQL Server Management Studioによってエラーがスローされます。

declare @percentage numeric(3,2)
set @percentage = cast(15 as numeric(3,2))

しかし、数値宣言を

declare @percentage numeric(4,2)
set @percentage = cast(15 as numeric(4,2))

すべてがうまくいきます。

数値データ型に制限はありますか?

65
Junior M

数値は、桁の合計数を定義し、次に小数点以下の数を定義します。

Numeric(3,2)は最大9.99までしか保持できません。

125
Joe

見てみましょう、数値(3,2)。つまり、データ用に3つの場所があり、そのうちの2つが小数点の右側にあり、小数点の左側に1つしか残っていません。 15は、小数点の左側に2桁あります。ところで、値として100を持っている可能性がある場合、数値(5、2)に増やします

27
HLGEM

NUMERIC(3,2)は、合計で3桁、小数点以下2桁を意味します。そのため、小数点の前に小数点が1つだけあります。

NUMERIC(5,2)を試してください-3つ前、2つ後の小数点。

17
marc_s

精度とスケールはしばしば誤解されます。 numeric(3,2)では、全体で3桁が必要ですが、小数点以下2桁が必要です。 15 => 15.00が必要な場合、先頭の1がオーバーフローを引き起こします(小数点の右側に2桁が必要な場合は、左側にもう1桁の余地しかないため)。 4,2では、4桁すべてが適合するため、問題はありません。

16
Aaron Bertrand