sql >> Databasteknik >  >> RDS >> Sqlserver

SQL Server:Decimal Precision/Scale ger konstiga resultat

dokumentationen är lite ofullständig när det gäller magin i värdet 6 och när max ska tillämpas funktion, men här är en tabell över mina resultat, baserad på den dokumentationen.

Som det står är formlerna för division:

Och, som du själv lyfter fram, har vi då fotnoten:

Så här är vad jag producerade i mitt kalkylark:

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

Så jag använder pr och sr för att ange resultatets precision och skala. prInit och srInit formler är exakt forumlas från dokumentationen. Som vi kan se är precisionen i resultatet i alla tre fallen mycket större än 38 och så gäller fotnoten. prOver är bara max(0,prInit - 38) - hur mycket vi måste justera precisionen med om fotnoten gäller. prAdjusted är bara prInit - prOver . Vi kan se i alla tre fallen att den slutliga precisionen för resultatet är 38 .

Om jag tillämpar samma justeringsfaktor till skalorna så skulle jag få resultat på 0 , 10 och 9 . Men vi kan se att ditt resultat för (38,16) case har en skala på 6 . Så jag tror att det är där max(6,...). del av dokumentationen faktiskt gäller. Så min sista formel för srAdjusted är max(6,srInit-prOver) och nu min sista Justerade värden verkar matcha dina resultat.

Och, naturligtvis, om vi konsulterar dokumentationen för decimal , kan vi se att standard precision och skala, om du inte anger dem, är (18,0) , så här är raden för när du inte angav precision och skala:

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



  1. Användbara tips för att felsöka vanliga fel i MySQL

  2. sql överordnat barnträd med sorteringsordning

  3. MySQL-replikering genom SSH-tunneln

  4. Mysql Välj COL flera gånger för olika värden