sql >> データベース >  >> RDS >> Sqlserver

SQL Server :10 進数の精度/スケールで奇妙な結果が得られる

    ドキュメント6 の魔法に関しては少し不完全です max をいつ適用するか 関数ですが、そのドキュメントに基づいた私の調査結果の表を次に示します。

    それが言うように、除算の式は次のとおりです。

    そして、あなた自身が強調しているように、脚注があります:

    それで、これが私がスプレッドシートで作成したものです:

    p1 s1 p2 s2 prInit srInit prOver prAdjusted srAdjusted
    38 16 38 16 93     55     55     38         6
    28 16 28 16 73     45     35     38         10
    29 16 29 16 75     46     37     38         9
    

    だから、私は pr を使っています と sr 結果の精度とスケールを示します。 prInit および srInit 数式は、ドキュメントのフォーラムとまったく同じです。ご覧のとおり、3 つのケースすべてで、結果の精度は 38 よりもはるかに大きくなっています。 したがって、脚注が適用されます。 prOver max(0,prInit - 38) だけです - 脚注が適用される場合、精度をどの程度調整する必要があるか。 prAdjusted prInit - prOver だけです .結果の最終的な精度が 38 であることが、3 つのケースすべてでわかります。 .

    同じを適用すると スケールに調整係数を適用すると、0 の結果が得られます 、 10 および 9 .しかし、 (38,16) の結果を見ることができます ケースのスケールは 6 です .だから私はそれが max(6,... ドキュメントの一部が実際に適用されます。 srAdjusted の最終式 max(6,srInit-prOver) です そして今、私の最終的な Adjusted 値が結果と一致しているように見えます。

    もちろん、decimal デフォルト 指定しない場合、精度と位取りは (18,0) になります。 、つまり、精度と位取りを指定しなかった場合の行は次のとおりです:

    p1 s1 p2 s2 prInit srInit prOver prAdjusted srAdjusted
    18 0  18 0  37     19     0      37         19
    



    1. Oracleは2つの異なる日付を比較します

    2. SQLServerの文字列へのvarbinary

    3. 2つのSQLServerデータベース(スキーマとデータ)を比較するための最良のツールは何ですか?

    4. Javaを使用してSSH経由でMySQLに接続する