Question

Pourquoi l'instruction select ci-dessous renvoie-t-elle deux valeurs différentes?

declare @tempDec decimal
set @tempDec = 1.0 / (1.0 + 1.0)
select @tempDec, 1.0 / (1.0 + 1.0)
Était-ce utile?

La solution

Cela convient pour les littéraux tels que 1.0, mais si vous extrayez les données des colonnes d'un tableau, vous devez convertir / convertir le premier nombre évalué dans votre équation:

convert(decimal, [col1]) / ([col2] + [col3])

-ou -

convert(decimal(15, 2), [col1]) / ([col2] + [col3])

Autres conseils

J'ai appris par un collègue au moment où j'ai posté ceci.

Vous devez spécifier la précision et l'échelle par défaut.

Cela fonctionne dans ce scénario: declare @tempDec decimal (3,2)

À partir de MSDN:

décimal [(p [, s])] et numérique [(p [, s])] Précision fixe et numéros d'échelle. Lorsque la précision maximale est utilisée, les valeurs valides sont comprises entre - 10 ^ 38 +1 et 10 ^ 38 - 1. Les synonymes SQL-92 de décimal sont déc et déc (p, s). numeric est fonctionnellement équivalent à décimal.

p (précision) Le nombre total maximum de chiffres décimaux pouvant être enregistrés, à gauche et à droite du point décimal. La précision doit être comprise entre 1 et la précision maximale de 38. La précision par défaut est de 18.

s (échelle) Nombre maximal de chiffres décimaux pouvant être stockés à droite du séparateur décimal. L'échelle doit être une valeur de 0 à p. L'échelle ne peut être spécifiée que si une précision est spécifiée. L'échelle par défaut est 0; donc 0 < = s < = p. Les tailles de stockage maximales varient en fonction de la précision.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top