decimal et numeric (Transact-SQL)

Types de données numériques ayant une précision et une échelle fixes.

  • decimal [ **(**p[ **,**s] )] et numeric[ **(**p[ **,**s] )]
    Valeurs de précision et d'échelle fixes. Lorsque la précision maximale est utilisée, les valeurs valides sont comprises entre - 10^38 +1 et 10^38 - 1. Les synonymes ISO de decimal sont dec et dec(p, s). numeric est fonctionnellement équivalent à decimal.

  • p (précision)
    Nombre maximal de chiffres décimaux à gauche et à droite de la virgule. La précision doit être une valeur comprise entre 1 et la précision maximale de 38. La précision par défaut est 18.

  • s (échelle)
    Nombre de chiffres décimaux à droite de la virgule. Ce nombre est soustrait de p afin de déterminer le nombre maximal de chiffres décimaux à gauche de la virgule. La valeur de l'échelle doit être comprise entre 0 et p. L'échelle ne peut être spécifiée que si la précision l'est également. La valeur par défaut de l'échelle est 0, par conséquent 0 <= s <= p. Les tailles de stockage maximales varient en fonction de la précision.

    Précision

    Taille de stockage (octets)

    1 - 9

    5

    10-19

    9

    20-28

    13

    29-38

    17

Conversion des données numériques et décimales

Pour les types de données decimal et numeric, SQL Server considère chaque combinaison de précision et d'échelle comme un type de données différent. Par exemple, decimal(5,5) et decimal(5,0) sont considérés comme des types de données différents.

Dans les instructions Transact-SQL, une constante avec une virgule est automatiquement convertie en valeur de donnée numeric, en utilisant la précision et l'échelle requises minimales. Par exemple, la constante 12,345 est convertie en valeur numeric avec une précision de 5 et une échelle de 3.

La conversion de decimal ou de numeric en float ou real peut entraîner une certaine perte de précision. La conversion de int, smallint, tinyint, float, real, money ou smallmoney en decimal ou numeric peut entraîner un dépassement de capacité.

Par défaut, SQL Server utilise les arrondis lorsqu'il convertit un nombre en valeur decimal ou numeric avec une précision et une échelle plus faibles. Toutefois, si l'option SET ARITHABORT a la valeur ON, SQL Server déclenche une erreur lors du dépassement de capacité. Perdre uniquement la précision et l'échelle ne suffit pas à engendrer une erreur.

Lors de la conversion de valeurs flottantes ou réelles en valeurs décimales ou numériques, la valeur décimale n'aura jamais plus de 17 décimales. Toute valeur flottante < 5E-18 sera toujours convertie en 0.

Voir aussi

Référence

ALTER TABLE (Transact-SQL)

CAST et CONVERT (Transact-SQL)

CREATE TABLE (Transact-SQL)

DECLARE @local\_variable (Transact-SQL)

SET @local\_variable (Transact-SQL)

sys.types (Transact-SQL)