【解決方法】数値をデータ型数値に変換中に算術オーバーフロー エラーが発生しました。

[ad_1]

こんにちは専門家、

私の理解によると NUMERIC(18, 10) column は、小数点の左側が 18 桁、右側が 10 桁になります。

私たちの手順の 1 つは、はるかに小さい値に対して「数値をデータ型数値に変換する算術オーバーフロー エラー」エラーをスローし始めました。 msdn のドキュメントを確認しました http://msdn.microsoft.com/en-us/library/ms187746.aspx[^] これも同じことを言っているようです。 ここで見逃しているものはありますか?

例:

SQL
SELECT CAST(1234567891234567.34 AS NUMERIC(18,2))  --Works
SELECT CAST(1234567891234567.34 AS NUMERIC(18,10)) --fails with Arithmetic overflow error

キャストを次のように変更することで問題を修正しました。 NUMERIC(18, 2) しかし、問題をもう少し深く理解したかったのです。

解決策 1

これを読む :
http://msdn.microsoft.com/en-us/library/ms187746.aspx[^]

NUMERIC (p,s) : p は小数点の左右両方を意味します

一般に、同じコンテキストで大きな数字と小さな数字を使用することはできません (数百万ドルを処理し、セントの 1/10000 を追跡するなど、これらのスケールでは違いがないため)。

解決策 2

によって与えられる解 1 メディ・ゴーラム とても良い。

OPは、最初のケースでエラーがスローされなかった理由と、2番目のケースでエラーがスローされた理由を具体的に知りたいので、以下を追加したいと思います。

発言からもわかるように

SQL
SELECT CAST(1234567891234567.34 AS NUMERIC(18,2))  --Works
SELECT CAST(1234567891234567.34 AS NUMERIC(18,10)) --fails with Arithmetic overflow error

声明からの最初のケースでは、それは明らかです NUMERIC(18,2) 合計桁数は 18 で、10 進数の左側には 16 桁が使用可能です。 1234567891234567 16桁です。 したがって、エラーはありません。
2番目のケースでは、ステートメントから NUMERIC(18,10)、小数点以下8桁まで利用可能ですが、 1234567891234567 8桁以上の16桁です。 したがって、算術オーバーフロー エラーが発生します。

解決策 5

やあ、

NUMERIC(18, 10) には 18+10 桁がありません。この注釈は、18 桁があり、そのうちの 10 桁が小数点以下にあることを意味します。

18 個の単位桁と 10 個の 10 進数が必要な場合は、次のように宣言します: NUMERIC(28,10)

[ad_2]

コメント

タイトルとURLをコピーしました