Share via


decimal et numeric (Transact-SQL)

S’applique à :SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)Point de terminaison analytique SQL dans Microsoft FabricEntrepôt dans Microsoft Fabric

les valeurs décimales et numériques sont des types de données numériques qui ont une précision et une échelle fixes. Les nombres décimaux et numériques sont des synonymes et peuvent être utilisés de façon interchangeable.

Arguments

décimal [ ( p [ , s ] ) ] et numérique [ ( 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 + 110^38 - 1. Les synonymes ISO des décimales sont dec et dec(p,s). numeric est fonctionnellement identique à decimal.

p (précision)

Nombre total maximal de chiffres décimaux à stocker. Ce nombre inclut le côté à gauche et le côté à 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.

Notes

Informatica prend uniquement en charge 16 chiffres significatifs, quelles que soient la précision et l’échelle spécifiées.

s (échelle)

Nombre de chiffres décimaux stockés à droite de la virgule. Ce nombre est soustrait de p afin de déterminer le nombre maximal de chiffres à gauche de la virgule décimale. La mise à l’échelle doit être une valeur comprise entre 0 et pet peut uniquement être spécifiée si la précision est indiquée. La mise à l’échelle par défaut est 0, et ainsi 0 <= s <= p. Les tailles de stockage maximales varient en fonction de la précision.

Precision Taille de stockage (octets)
1-9 5
10-19 9
20-28 13
29-38 17

Notes

Informatica (connecté via le connecteur Informatica SQL Server PDW) prend uniquement en charge 16 chiffres significatifs, quelles que soient la précision et l’échelle spécifiées.

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

Pour les types de données décimal et numèrique, SQL Server considère chaque combinaison de précision et de mise à l’é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 décimale est automatiquement convertie en valeur de donnée numérique, en utilisant la précision et la mise à l’échelle requises minimales. Par exemple, la constante 12.345 est convertie en valeur numérique , avec une précision et 5une échelle de 3.

Conversion de Conversion en Risque de conversion
decimal et numeric float ou real Perte possible de précision
int, smallint, tinyint, float, real, money, or smallmoney decimal et numeric Dépassement de capacité possible

Par défaut, SQL Server utilise les arrondis lors de la conversion d’un nombre en valeur décimale ou numérique avec une précision et une mise à l’échelle plus faibles. À l’inverse, si l’option SET ARITHABORT est ON, SQL Server génère une erreur lorsque le dépassement de capacité se produit. Perdre uniquement la précision et l'échelle ne suffit pas à engendrer une erreur.

Avant SQL Server 2016 (13.x), la conversion de valeurs float en valeurs décimales ou numériques est limitée aux valeurs de précision 17 chiffres uniquement. Toute valeur flottante inférieure 5E-18 à (lorsqu’elle est définie à l’aide de la notation scientifique de 5E-18 ou de la notation décimale de 0.000000000000000005) arrondit à 0. Cette restriction n’apparaît pas dans SQL Server 2016 (13.x) et les versions ultérieures.

Exemples

L’exemple suivant crée une table à l’aide des types de données decimal et numeric. Les valeurs sont insérées dans chaque colonne. Les résultats sont retournés à l’aide d’une SELECT instruction.

CREATE TABLE dbo.MyTable (
    MyDecimalColumn DECIMAL(5, 2),
    MyNumericColumn NUMERIC(10, 5)
);
GO

INSERT INTO dbo.MyTable
VALUES (123, 12345.12);
GO

SELECT MyDecimalColumn, MyNumericColumn
FROM dbo.MyTable;

Voici le jeu de résultats obtenu.

MyDecimalColumn  MyNumericColumn
---------------- ----------------
123.00           12345.12000