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

ALTER TABLE (Transact-SQL)

CAST e CONVERT (Transact-SQL)

CREATE TABLE (Transact-SQL)

DECLARE @local\_variable (Transact-SQL)

SET @local\_variable (Transact-SQL)

sys.types (Transact-SQL)