decimal e numeric (Transact-SQL)
Tipi di dati numerici con precisione e scala fisse.
decimal [ **(**p[ **,**s] )] e numeric[ **(**p[ **,**s] )]
Numeri con precisione e scala fisse. Se viene utilizzata la precisione massima, i valori validi sono compresi nell'intervallo da - 10^38 +1 a 10^38 - 1. I sinonimi ISO per il tipo di dati decimal sono dec e dec(p, s). Dal punto di vista funzionale numeric è equivalente a decimal.p (precisione)
Numero massimo totale di cifre decimali che verranno archiviate, 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.s (scala)
Numero massimo di cifre decimali che verranno archiviate 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. È possibile specificare la scala solo se viene specificata la precisione. La scala predefinita è 0. Di conseguenza, 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
Conversione dei dati di tipo decimal e numeric
In SQL Server per i tipi di dati decimal e numeric ogni combinazione specifica di precisione e scala viene considerata 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 numeric con precisione 5 e scala 3.
La conversione dal tipo di dati decimal o numeric nel tipo di dati float o real può comportare una diminuzione della precisione. La conversione dal tipo di dati int, smallint, tinyint, float, real, money o smallmoney nel tipo di dati decimal o numeric può causare un overflow.
Per impostazione predefinita, in SQL Server, nelle conversioni in un valore decimal o numeric con precisione e scala inferiori viene applicato l'arrotondamento. Se l'opzione SET ARITHABORT è impostata su ON, in caso di overflow viene segnalato un errore in SQL Server. La diminuzione di precisione e scala nelle operazioni di conversione non è sufficiente per generare un errore.
Quando si convertono i valori float o reali in valori decimali o numerici, il valore decimale non conterrà mai più di 17 decimali. I valori float < 5E-18 verranno convertiti sempre come 0.
Vedere anche
Riferimento
DECLARE @local\_variable (Transact-SQL)