Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Come viene definita la scala quando si dividono decimale e bigint?

Argomento 1:3 AS DECIMAL(19, 8)

Argomento 2:27 AS DECIMAL (18, 0) -- la precisione predefinita è 18, la scala predefinita è 0 (BIGINT è stato convertito in DECIMAL a causa della precedenza del tipo)

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

Calcoliamo ad esempio 1:

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

Per tutti i tuoi esempi otterrai sempre una scala max 27.

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

L'intera parte richiede solo le cifre necessarie (1), (2), (1).

Per me è tutto perfettamente valido.

Questa risposta si basa sul lavoro di @Paul White da Decimal Truncation In division .