Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Como a escala é definida quando decimal e bigint são divididos?


Argumento 1:3 AS DECIMAL(19, 8)

Argumento 2:27 AS DECIMAL (18, 0) -- a precisão padrão é 18, a escala padrão é 0 (BIGINT foi convertido para DECIMAL devido à precedência de tipo)
p1 = 19
p2 = 18
s1 = 8
s2 = 0

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

Para todos os seus exemplos, você obterá sempre uma escala máxima de 27.
 0.111111111111111111111111111 (27)
11.111111111111111111111111111 (27)
 0.005488934750153684025643277 (27)

A parte inteira leva apenas os dígitos necessários (1), (2), (1).

Para mim tudo é perfeitamente válido.

Esta resposta é baseada no trabalho de @Paul White de Decimal Truncation In division .