sql >> Base de Datos >  >> RDS >> Sqlserver

SQL Server:la precisión/escala decimal están dando resultados extraños

La documentación está un poco incompleto en cuanto a la magia del valor 6 y cuándo aplicar el max función, pero aquí hay una tabla de mis hallazgos, basada en esa documentación.

Como dice, las fórmulas para la división son:

Y, como usted mismo destaca, tenemos la nota a pie de página:

Entonces, esto es lo que produje en mi hoja de cálculo:

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

Entonces, estoy usando pr y sr para indicar la precisión y la escala del resultado. El prInit y srInit las fórmulas son exactamente los foros de la documentación. Como podemos ver, en los 3 casos, la precisión del resultado es mucho mayor que 38 y así se aplica la nota al pie. prOver es solo max(0,prInit - 38) - cuánto tenemos que ajustar la precisión si se aplica la nota al pie. prAdjusted es solo prInit - prOver . Podemos ver en los tres casos que la precisión final del resultado es 38 .

Si aplico el mismo factor de ajuste a las escalas entonces obtendría resultados de 0 , 10 y 9 . Pero podemos ver que su resultado para el (38,16) el caso tiene una escala de 6 . Así que creo que ahí es donde el max(6,... parte de la documentación realmente se aplica. Así que mi fórmula final para srAdjusted es max(6,srInit-prOver) y ahora mi Adjusted final los valores parecen coincidir con sus resultados.

Y, por supuesto, si consultamos la documentación de decimal , podemos ver que el predeterminado la precisión y la escala, si no las especifica, son (18,0) , así que aquí está la fila para cuando no especificó la precisión y la escala:

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