decimal et numeric (Transact-SQL)
S’applique à : SQL Server Base de données Azure SQL Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW) Point de terminaison d'analyse SQL dans Microsoft Fabric Entrepôt dans Microsoft Fabric Base de données SQL 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 + 1
10^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 5
une é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.
MyDecimalColumn MyNumericColumn
---------------- ----------------
123.00 12345.12000