Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Wie ist die Skalierung definiert, wenn Dezimal und Bigint dividiert werden?

Argument 1:3 AS DECIMAL(19, 8)

Argument 2:27 AS DECIMAL (18, 0) -- Standardpräzision ist 18, Standardmaßstab ist 0 (BIGINT wurde in DECIMAL umgewandelt aufgrund von Typvorrang)

p1 = 19
p2 = 18
s1 = 8
s2 = 0

Lassen Sie uns zum Beispiel 1 berechnen:

precision: (19 - 8 + 0) + MAX(6, 8 + 18 + 1) = 38
scale:     MAX(6, 8 + 18 + 1) = 27

Für alle Ihre Beispiele erhalten Sie immer maximal 27 Skalen.

 0.111111111111111111111111111 (27)
11.111111111111111111111111111 (27)
 0.005488934750153684025643277 (27)

Der ganze Teil benötigt nur die notwendigen Ziffern (1), (2), (1).

Für mich ist alles vollkommen gültig.

Diese Antwort basiert auf der Arbeit von @Paul White aus Decimal Truncation In division .