

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Tipi numerici
<a name="Numeric_types"></a>

I tipi di dati numerici comprendono numeri interi, decimali e in virgola mobile. 

**Topics**
+ [Tipi Integer](Numeric_types-integer-types.md)
+ [Tipo DECIMAL o NUMERIC](Numeric_types-decimal-or-numeric-type.md)
+ [Tipi in virgola mobile](Numeric_types-floating-point-types.md)
+ [Calcoli con valori numerici](Numeric_computations.md)

# Tipi Integer
<a name="Numeric_types-integer-types"></a>

Usa i seguenti tipi di dati per memorizzare numeri interi di vari intervalli. Non è possibile memorizzare valori al di fuori dell'intervallo consentito per ogni tipo. 

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/clean-rooms/latest/sql-reference/Numeric_types-integer-types.html)

# Tipo DECIMAL o NUMERIC
<a name="Numeric_types-decimal-or-numeric-type"></a>

Usare il tipo di dati DECIMAL o NUMERIC per memorizzare i valori con una *precisione definita dall'utente*. Le parole chiave DECIMAL e NUMERIC sono interscambiabili. In questo documento, *decimale* è il termine preferito per questo tipo di dati. Il termine *numerici* è usato solitamente per riferirsi a tipi di dati interi, decimali e in virgola mobile. 

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/clean-rooms/latest/sql-reference/Numeric_types-decimal-or-numeric-type.html)

Definisci una colonna DECIMAL in una tabella specificando un e: *precision* *scale* 

```
decimal(precision, scale)
```

 *precision*   
Il numero totale di cifre significative nell'intero valore: il numero di cifre su entrambi i lati del punto decimale. Ad esempio, il numero `48.2891` ha una precisione di 6 e una scala di 4. La precisione predefinita, se non specificata, è 18. La precisione massima è 38.  
 Se il numero di cifre a sinistra del punto decimale in un valore di input supera la precisione della colonna meno la scala, il valore non può essere copiato nella colonna (o inserito o aggiornato). Questa regola si applica a qualsiasi valore che non rientra nell'intervallo della definizione della colonna. Ad esempio, gli intervalli di valori ammessi per una colonna `numeric(5,2)` è da `-999.99` a `999.99`. 

 *scale*   
Il numero di cifre decimale nella parte frazionaria del valore, alla destra del punto decimale. Gli interi hanno una scala di zero. Nella specifica di una colonna, è necessario che il valore della scala sia inferiore o uguale al valore della precisione. La scala predefinita, se non specificata, è 0. La scala massima è 37.  
Se la scala di un valore input caricato in una tabella è maggiore della scala della colonna, il valore viene arrotondato alla scala specificata. Ad esempio, la colonna PRICEPAID nella tabella SALES è una colonna DECIMAL(8,2). Se un valore DECIMAL(8,4) viene inserito nella colonna PRICEPAID, il valore viene arrotondato alla scala di 2.   

```
insert into sales
values (0, 8, 1, 1, 2000, 14, 5, 4323.8951, 11.00, null);

select pricepaid, salesid from sales where salesid=0;

pricepaid | salesid
-----------+---------
4323.90 |       0
(1 row)
```
 Tuttavia, i risultati di espliciti cast di valori selezionati dalle tabelle non sono arrotondati.

**Nota**  
Il valore positivo massimo che è possibile inserire in una colonna DECIMAL(19,0) è `9223372036854775807` (263 -1). Il valore negativo massimo è `-9223372036854775807`. Ad esempio, il tentativo di inserire il valore `9999999999999999999` (19 nove) causerà un errore dell'overflow. Indipendentemente dalla posizione del punto decimale, la stringa più grande che AWS Clean Rooms può rappresentare come numero DECIMAL è `9223372036854775807`. Ad esempio, il valore più grande che è possibile caricare in una colonna DECIMAL(19,18) è `9.223372036854775807`.  
Queste regole sono dovute a quanto segue:   
I valori DECIMAL con 19 o meno cifre significative di precisione vengono memorizzati internamente come numeri interi da 8 byte.
I valori DECIMAL con una precisione compresa tra 20 e 38 cifre significative vengono memorizzati come numeri interi da 16 byte.

## Note sull'utilizzo di colonne NUMERIC o DECIMAL a 128 bit
<a name="Numeric_types-notes-about-using-128-bit-decimal-or-numeric-columns"></a>

Non assegnare in modo arbitrario la precisione massima alle colonne DECIMAL a meno che non sia certo che l'applicazione richieda tale precisione. I valori a 128 bit usano il doppio dello spazio su disco rispetto ai valori a 64 bit e possono quindi rallentare il tempo di esecuzione delle query. 

# Tipi in virgola mobile
<a name="Numeric_types-floating-point-types"></a>

Usa i tipi di dati REAL e DOUBLE PRECISION per memorizzare valori numerici con *precisione variabile*. Questi tipi sono *inesatti*, il che significa che alcuni valori vengono memorizzati come approssimazioni, così che la memorizzazione e la restituzione di un valore specifico possono risultare in lievi discrepanze. Se hai bisogno di calcoli e storage precisi (come per importi monetari), usa il tipo di dati DECIMAL.

REAL rappresenta il formato a virgola mobile a precisione singola, secondo lo standard IEEE 754 per l'aritmetica in virgola mobile. Ha una precisione di circa 6 cifre e un intervallo compreso tra 1E-37 e 1E\$137. È inoltre possibile FLOAT4 specificare questo tipo di dati come.

DOUBLE PRECISION rappresenta il formato a virgola mobile a precisione doppia, secondo lo standard IEEE 754 per l'aritmetica binaria a virgola mobile. Ha una precisione di circa 15 cifre e un intervallo compreso tra 1E-307 e 1E\$1308. È inoltre possibile specificare questo tipo di dati come FLOAT o FLOAT8.

# Calcoli con valori numerici
<a name="Numeric_computations"></a>

Nel AWS Clean Rooms, il *calcolo* si riferisce a operazioni matematiche binarie: addizione, sottrazione, moltiplicazione e divisione. Questa sezione descrive i tipi restituiti previsti per queste operazioni, nonché la formula specifica che viene applicata per determinare la precisione e la scala quando sono coinvolti tipi di dati DECIMAL. 

Quando valori numerici vengono calcolati durante l'elaborazione di query, potresti affrontare casi in cui il calcolo è impossibile e la query restituisce un errore dell'overflow numerico. Potresti anche riscontrare casi in cui la scala di valori calcolati varia o è imprevista. Per alcune operazioni, è possibile usare il casting esplicito (promozione tipo) o i parametri di configurazione AWS Clean Rooms per risolvere questi problemi. 

Per informazioni sui risultati di calcoli simili con funzioni SQL, consultare [AWS Clean Rooms Funzioni Spark SQL](sql-functions-topic-spark.md). 

## Tipi restituiti per i calcoli
<a name="Numeric_computations-return-types"></a>

Dato il set di tipi di dati numerici supportati in AWS Clean Rooms, la tabella seguente mostra i tipi di rendimento previsti per le operazioni di addizione, sottrazione, moltiplicazione e divisione. La prima colonna sul lato sinistro della tabella rappresenta il primo operando nel calcolo e la riga in alto rappresenta il secondo operando. 

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/clean-rooms/latest/sql-reference/Numeric_computations.html)

## Precisione e scala di risultati DECIMAL calcolati
<a name="Numeric_computations-precision-and-scale-of-computed-decimal-results"></a>

La tabella seguente riassume le regole per la scala e la precisione risultanti dal calcolo quando operazioni matematiche restituiscono risultati DECIMAL. In questa tabella, `p1` `s1` rappresentano la precisione e la scala del primo operando in un calcolo. `p2`e `s2` rappresentano la precisione e la scala del secondo operando. (Indipendentemente da questi calcoli, la precisione del risultato massima è 38 e la scala del risultato massima è 38.) 

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/clean-rooms/latest/sql-reference/Numeric_computations.html)

Ad esempio, le colonne PRICEPAID e COMMISSION nella tabella SALES sono entrambe colonne DECIMAL(8,2). Se dividi PRICEPAID per COMMISSION (o viceversa), la formula è applicata come segue: 

```
Precision = 8-2 + 2 + max(4,2+8-2+1)
= 6 + 2 + 9 = 17

Scale = max(4,2+8-2+1) = 9

Result = DECIMAL(17,9)
```

Il calcolo seguente è la regola generale per il calcolo della scala e della precisione risultanti per le operazioni eseguite su valori DECIMAL con operatori impostati come UNION, INTERSECT ed EXCEPT o funzioni come COALESCE e DECODE: 

```
Scale = max(s1,s2)
Precision = min(max(p1-s1,p2-s2)+scale,19)
```

Ad esempio, una DEC1 tabella con una colonna DECIMAL (7,2) viene unita a una DEC2 tabella con una colonna DECIMAL (15,3) per creare una tabella. DEC3 Lo schema di DEC3 mostra che la colonna diventa una colonna NUMERIC (15,3). 

```
select * from dec1 union select * from dec2;
```

Nell'esempio sopra, la formula è applicata come segue: 

```
Precision = min(max(7-2,15-3) + max(2,3), 19)
= 12 + 3 = 15

Scale = max(2,3) = 3

Result = DECIMAL(15,3)
```

## Note sulle operazioni di divisione
<a name="Numeric_computations-notes-on-division-operations"></a>

Per le operazioni di divisione, le divide-by-zero condizioni restituiscono errori. 

Il limite di scala di 100 è applicato dopo aver calcolato la precisione e la scala. Se la scala del risultato calcolata è maggiore di 100, i risultati della divisione vengono scalati come segue:
+ Precisione = ` precision - (scale - max_scale)` 
+ Dimensionare = ` max_scale ` 

Se la precisione calcolata supera la precisione massima (38), la precisione viene ridotta a 38 e la scala diventa il risultato di: `max(38 + scale - precision), min(4, 100))` 

## Condizioni di overflow
<a name="Numeric_computations-overflow-conditions"></a>

L'overflow viene controllato per tutti i calcoli numerici. I dati DECIMAL con una precisione di 19 o inferiore vengono memorizzati come interi a 64 bit. I dati DECIMAL con una precisione superiore a 19 vengono memorizzati come interi a 128 bit. La precisione massima per tutti i valori DECIMAL è 38 e la scala massima è 37. Gli errori dell'overflow si verificano quando un valore supera questi limiti, che si applicano agli insiemi dei risultati finali e intermedi: 
+ Il casting esplicito genera errori di overflow in fase di esecuzione quando valori di dati specifici non corrispondono alla precisione o alla scala richieste specificate dalla funzione cast. Ad esempio, non è possibile eseguire il cast di tutti i valori della colonna PRICEPAID nella tabella SALES (una colonna DECIMAL (8,2)) e restituire un risultato DECIMAL (7,3): 

  ```
  select pricepaid::decimal(7,3) from sales;
  ERROR:  Numeric data overflow (result precision)
  ```

  Questo errore si verifica perché *alcuni* dei valori più grandi nella colonna PRICEPAID non possono essere espressi.
+ Le operazioni di moltiplicazione producono risultati in cui la scala del risultato è la somma della scala di ciascun operando. Se entrambi gli operando hanno una scala di 4, ad esempio, la scala del risultato è 8, lasciando solo 10 cifre per il lato sinistro del punto decimale. Pertanto, è relativamente facile incorrere in condizioni di overflow quando si moltiplicano due grandi numeri che possiedono entrambi una scala significativa.

## Calcoli numerici con tipi INTEGER e DECIMAL
<a name="Numeric_computations-numeric-calculations-with-integer-and-decimal-types"></a>

Quando uno degli operandi di un calcolo ha un tipo di dati INTEGER e l'altro operando è DECIMAL, l'operando INTEGER viene implicitamente espresso come DECIMAL. 
+ SMALLINT o SHORT viene espresso come DECIMAL (5,0) 
+ INTEGER viene espresso come DECIMAL (10,0) 
+ BIGINT o LONG viene espresso come DECIMAL (19,0) 

Ad esempio, se moltiplichi SALES.COMMISSION, una colonna DECIMAL(8,2), e SALES.QTYSOLD, una colonna SMALLINT, per questo calcolo viene eseguito il cast come segue: 

```
DECIMAL(8,2) * DECIMAL(5,0)
```