Partager via


Précision, échelle et longueur (Transact-SQL)

La précision est le nombre de chiffres qui composent un nombre. L'échelle est le nombre de chiffres à droite de la virgule décimale dans un nombre. Par exemple, la précision du nombre 123,45 est 5 et son échelle est 2.

Dans SQL Server, la précision maximale par défaut des types de données numeric et decimal est 38. Dans les versions antérieures de SQL Server, elle est de 28.

La longueur d'un type de données numérique est le nombre d'octets utilisés pour stocker le nombre. La longueur d'un type de données chaîne de caractères ou Unicode est le nombre de caractères. La longueur des types de données binary, varbinary et image est le nombre d'octets. Par exemple, une donnée de type int peut contenir 10 chiffres ; elle est stockée sur 4 octets et n'accepte pas de virgule décimale. La précision du type int est 10, sa longueur est 4 et son échelle est 0.

Lors de la concaténation de deux expressions char, varchar, binary ou varbinary, la longueur de l'expression obtenue est soit la somme des longueurs des deux expressions sources, soit 8 000 caractères, selon celle de ces deux grandeurs qui est la moins élevée.

Lors de la concaténation de deux expressions de type nchar ou nvarchar, la longueur de l'expression obtenue est soit la somme des longueurs des deux expressions sources, soit 4 000 caractères, selon celle de ces deux grandeurs qui est la moins élevée.

Lorsque deux expressions de même type mais de longueur différente sont comparées à l'aide des fonctions UNION, EXCEPT ou INTERSECT, la longueur du résultat est la longueur maximale des deux expressions.

La précision et l'échelle des types de données numériques sont constantes, sauf pour le type decimal. Si un opérateur arithmétique agit sur deux expressions du même type, le résultat est du même type de données, avec la précision et l'échelle définies pour ce type. Si un opérateur agit sur deux expressions de types de données numériques différents, les règles de priorité des types de données déterminent le type du résultat. Le résultat a la précision et l'échelle définies pour son type de données.

Le tableau suivant montre le calcul de la précision et de l'échelle lorsque le résultat d'une opération est du type decimal. Le résultat est de type decimal lorsqu'une des conditions suivantes est remplie :

  • Les deux expressions sont de type decimal ;

  • Une expression est de type decimal et l'autre est d'un type de données avec une priorité moins élevée.

Les expressions des opérandes sont notées e1 et e2, avec respectivement les précisions p1 et p2 et les échelles s1et s2. La précision et l'échelle d'une expression d'un type autre que decimal sont celles définies pour le type de données de l'expression.

Opération

Précision du résultat

Échelle du résultat *

e1 + e2

max(s1, s2) + max(p1-s1, p2-s2) + 1

max(s1, s2)

e1 - e2

max(s1, s2) + max(p1-s1, p2-s2) + 1

max(s1, s2)

e1 * e2

p1 + p2 + 1

s1 + s2

e1 / e2

p1 - s1 + s2 + max(6, s1 + p2 + 1)

max(6, s1 + p2 + 1)

e1 { UNION | EXCEPT | INTERSECT } e2

max(s1, s2) + max(p1-s1, p2-s2)

max(s1, s2)

e1 % e2

min(p1-s1, p2 -s2) + max( s1,s2 )

max(s1, s2)

* La précision et l'échelle du résultat ne peuvent pas être supérieures à 38. Si la précision du résultat est supérieure à 38, l'échelle correspondante est réduite pour empêcher la troncation de la partie entière du résultat.