Pourquoi l'instruction select ci-dessous renvoie-t-elle deux valeurs différentes?Attribution de la valeur d'affectation décimale de t-sql
declare @tempDec decimal
set @tempDec = 1.0/(1.0 + 1.0)
select @tempDec, 1.0/(1.0 + 1.0)
Pourquoi l'instruction select ci-dessous renvoie-t-elle deux valeurs différentes?Attribution de la valeur d'affectation décimale de t-sql
declare @tempDec decimal
set @tempDec = 1.0/(1.0 + 1.0)
select @tempDec, 1.0/(1.0 + 1.0)
C'est très bien pour les littéraux comme 1.0, mais si vous tirez les données des colonnes de la table, vous devez lancer/convertir le premier numéro évalué dans votre équation:
convert(decimal, [col1])/([col2] + [col3])
-ou-
convert(decimal(15, 2), [col1])/([col2] + [col3])
J'ai trouvé un collègue comme je l'ai posté.
Vous devez spécifier la précision et l'échelle par défaut.
Cela fonctionne dans ce scénario: décimal @tempDec déclarer (3,2)
De MSDN:
décimal [(p [, s])] et numérique [(p [, s])] Correction des numéros de précision et d'échelle. Lorsque la précision maximale est utilisée, les valeurs valides vont de - 10^38 +1 à 10^38 - 1. Les synonymes SQL-92 pour decimal sont dec et dec (p, s). numeric est fonctionnellement équivalent à decimal.
p (précision) Le nombre total maximal de chiffres décimaux pouvant être stockés, à la fois à gauche et à droite de la virgule décimale. La précision doit être comprise entre 1 et 38. La précision par défaut est 18.
s (échelle) Le nombre maximal de chiffres décimaux pouvant être stockés à droite de la virgule décimale. L'échelle doit être une valeur comprise entre 0 et p. L'échelle peut être spécifiée uniquement si la précision est spécifiée. L'échelle par défaut est 0; par conséquent, 0 < = s < = p. Les tailles de stockage maximales varient en fonction de la précision.
En d'autres termes, l'échelle zéro dans la variable locale supprime les données après le point de stockage – gbn