1

以下の select ステートメントが 2 つの異なる値を返すのはなぜですか?

declare @tempDec decimal
set @tempDec = 1.0 / (1.0 + 1.0)
select @tempDec, 1.0 / (1.0 + 1.0)
4

2 に答える 2

3

1.0 のようなリテラルでは問題ありませんが、テーブルの列からデータを取得する場合は、式の最初に評価された数値をキャスト/変換する必要があります。

convert(decimal, [col1]) / ([col2] + [col3])

-また-

convert(decimal(15, 2), [col1]) / ([col2] + [col3])
于 2008-11-13T21:02:30.587 に答える
1

これを投稿したとき、同僚から知りました。

デフォルトの精度とスケールを指定する必要があります。

これはこのシナリオで機能します: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です。最大ストレージサイズは、精度によって異なります。

于 2008-11-13T17:28:41.517 に答える