decimal e numeric (Transact-SQL)
Si applica a:SQL ServerDatabase SQL di AzureIstanza gestita di SQL di AzureAzure Synapse AnalyticsPiattaforma di strumenti analitici (PDW)Endpoint di analisi SQL in Microsoft FabricWarehouse in Microsoft Fabric
decimal e numeric sono tipi di dati numerici con precisione fissa e scala. decimal e numeric sono sinonimi e possono essere usati in modo intercambiabile.
Argomenti
decimal [ ( p [ , s ] ) ] e numeric [ ( p [ , s ] ) ]
Numeri con precisione e scala fisse. Quando viene usata la precisione massima, i valori validi provengono da -10^38 + 1
a 10^38 - 1
. I sinonimi ISO per decimal sono dec e dec(p,s). Dal punto di vista funzionale, numeric è identico a decimal.
p (precisione)
Numero massimo totale di cifre decimali da archiviare. Include le cifre sia a destra sia a sinistra del separatore decimale. La precisione deve essere un valore compreso tra 1 e la precisione massima di 38. La precisione predefinita è 18.
Nota
Informatica supporta solo 16 cifre significative, indipendentemente dalla precisione e dalla scala specificate.
s (scala)
Numero massimo di cifre decimali che da archiviare a destra del separatore decimale. Questo numero viene sottratto da p per determinare il numero massimo di cifre a sinistra del separatore decimale. La scala deve essere un valore compreso tra 0 e p e può essere specificato solo se viene specificata la precisione. La scala predefinita è 0
e quindi 0 <= s <= p
. Le dimensioni massime di archiviazione variano a seconda della precisione.
Precisione | Byte per l'archiviazione |
---|---|
1 - 9 | 5 |
10-19 | 9 |
20-28 | 13 |
29-38 | 17 |
Nota
Informatica (connesso tramite il connettore Informatica di SQL Server PDW) supporta solo 16 cifre significative, indipendentemente dalla precisione e dalla scala specificate.
Convertire dati decimali e numerici
Per i tipi di dati decimal e numeric, SQL Server considera ogni combinazione di precisione e scala un tipo di dati diverso. decimal(5,5) e decimal(5,0) sono ad esempio considerati tipi di dati diversi.
Nelle istruzioni Transact-SQL una costante con separatore decimale viene convertita automaticamente in un valore di tipo numeric in base ai valori di precisione e scala minimi necessari. Ad esempio, la costante 12.345
viene convertita in un valore numerico , con una precisione di 5
e una scala di 3
.
Conversione da | Conversione in | Rischio di conversione |
---|---|---|
decimal e numeric | float o real | Possibile perdita di precisione |
int, smallint, tinyint, float, real, money o smallmoney | decimal e numeric | Overflow possibile |
Per impostazione predefinita, quando si converte un numero in un valore decimal o numeric con precisione e scala inferiori, in SQL Server viene applicato l'arrotondamento. Viceversa, se l'opzione SET ARITHABORT
è ON
, SQL Server genera un errore quando si verifica l'overflow. La diminuzione di precisione e scala nelle operazioni di conversione non è sufficiente per generare un errore.
Prima di SQL Server 2016 (13.x), la conversione di valori float in decimal o numeric è limitata ai valori di precisione 17 cifre. Qualsiasi valore float minore di 5E-18
(se impostato usando la notazione scientifica di 5E-18
o la notazione decimale di 0.000000000000000005
) arrotonda fino a 0
. Questa restrizione non viene visualizzata in SQL Server 2016 (13.x) e versioni successive.
Esempi
Nell'esempio seguente viene creata una tabella usando i tipi di dati decimal e numeric. I valori vengono inseriti in ogni colonna. I risultati vengono restituiti tramite un'istruzione SELECT
.
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;
Questo è il set di risultati.
MyDecimalColumn MyNumericColumn
---------------- ----------------
123.00 12345.12000
Contenuto correlato
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per