以下の select ステートメントが 2 つの異なる値を返すのはなぜですか?
declare @tempDec decimal
set @tempDec = 1.0 / (1.0 + 1.0)
select @tempDec, 1.0 / (1.0 + 1.0)
1.0 のようなリテラルでは問題ありませんが、テーブルの列からデータを取得する場合は、式の最初に評価された数値をキャスト/変換する必要があります。
convert(decimal, [col1]) / ([col2] + [col3])
-また-
convert(decimal(15, 2), [col1]) / ([col2] + [col3])
これを投稿したとき、同僚から知りました。
デフォルトの精度とスケールを指定する必要があります。
これはこのシナリオで機能します:declare @tempDec decimal(3,2)
MSDNから:
10進数[(p [、s])]および数値[(p [、s])]精度とスケール数を修正しました。最大精度を使用する場合、有効な値は-10 ^38+1から10^38-1までです。10進数のSQL-92同義語はdecおよびdec(p、s)です。数値は機能的には10進数と同等です。
p(精度)小数点の左側と右側の両方に格納できる小数点以下の最大桁数。精度は、1から最大精度38までの値である必要があります。デフォルトの精度は18です。
■(スケール)小数点の右側に格納できる小数点以下の最大桁数。スケールは0からpまでの値でなければなりません。スケールは、精度が指定されている場合にのみ指定できます。デフォルトのスケールは0です。したがって、0 <= s<=pです。最大ストレージサイズは、精度によって異なります。