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

計算実行時のスケールの損失

    decimalのルール decimalへ 乗算と除算の変換はBOLで説明されています 。

    ただし、そのような切り捨てがどのように実行されるかは正確には指定されていません。 これはここに記載されています 。ただし、試行錯誤するだけの方が簡単な場合もあります。

    次の中間キャストは、望ましい結果をもたらします。それらと一緒に暮らすことができますか?

    DECLARE @var NUMERIC(19,8)
    DECLARE @a NUMERIC(19,8)
    DECLARE @b NUMERIC(19,8)
    
    SET @var = -413.72063274
    SET @a   = 651.00000000
    SET @b   = 1000.00000000
    
    DECLARE @v SQL_VARIANT 
    SET @v =  CAST(@a/@b AS NUMERIC(24,10))* CAST(@var AS NUMERIC(23,8))
    
    SELECT    CAST(SQL_VARIANT_PROPERTY(@v, 'BaseType') AS VARCHAR(30)) AS BaseType,    
              CAST(SQL_VARIANT_PROPERTY(@v, 'Precision') AS INT) AS PRECISION,    
              CAST(SQL_VARIANT_PROPERTY(@v, 'Scale') AS INT) AS Scale
    


    1. 死んだMySQLサーバーをバックアップする

    2. Oracle SQL PLS-00049:バインド変数が正しくありません

    3. MySQLサーバーは--secure-file-privオプションで実行されているため、Macでこのステートメントを実行できません。

    4. mysql重複データの削除