Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Comment l'échelle est-elle définie lorsque décimal et bigint sont divisés ?

Argument 1 :3 AS DECIMAL(19, 8)

Argument 2 :27 AS DECIMAL (18, 0) -- la précision par défaut est 18, l'échelle par défaut est 0 (BIGINT a été converti en DECIMAL en raison de la priorité des types)

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

Calculons par exemple 1 :

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

Pour tous vos exemples, vous obtiendrez toujours une échelle maximale de 27.

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

La partie entière ne prend que les chiffres nécessaires (1), (2), (1).

Pour moi tout est parfaitement valable.

Cette réponse est basée sur le travail de @Paul White de Decimal Truncation In division .