

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Tipos numéricos
<a name="Numeric_types"></a>

Los tipos de datos numéricos incluyen enteros, decimales y números en coma flotante. 

**Topics**
+ [Tipos de enteros](Numeric_types-integer-types.md)
+ [Tipo DECIMAL o NUMERIC](Numeric_types-decimal-or-numeric-type.md)
+ [Tipos de números en coma flotante](Numeric_types-floating-point-types.md)
+ [Cómputos con valores numéricos](Numeric_computations.md)

# Tipos de enteros
<a name="Numeric_types-integer-types"></a>

Usa los siguientes tipos de datos para almacenar números enteros de varios rangos. No puede almacenar valores fuera del rango permitido para cada tipo. 

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

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

Use el tipo de datos DECIMAL o NUMERIC para almacenar valores con una *precisión definida por el usuario*. Las palabras clave DECIMAL y NUMERIC son intercambiables. En este documento, *decimal* es el término preferido para este tipo de datos. El término *numérico* se utiliza genéricamente para referirse a tipos de datos enteros, decimales y con coma flotante. 

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

Defina una columna DECIMAL en una tabla especificando un *precision* y*scale*: 

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

 *precision*   
El número total de dígitos significativos en todo el valor: la cantidad de dígitos de ambos lados del punto decimal. Por ejemplo, el número `48.2891` tiene una precisión de 6 y una escala de 4. La precisión predeterminada es 18, si no se especifica. La precisión máxima es 38.  
 Si el número de dígitos a la izquierda del punto decimal en un valor de entrada supera la precisión de la columna menos su escala, no se puede copiar (ni insertar ni actualizar) el valor en la columna. Esta regla se aplica a cualquier valor que caiga fuera del rango de la definición de la columna. Por ejemplo, el rango permitido de valores para una columna `numeric(5,2)` es de `-999.99` a `999.99`. 

 *scale*   
El número de dígitos decimales en la parte fraccional del valor, a la derecha del punto decimal. Los enteros tienen una escala de cero. En la especificación de una columna, el valor de la escala debe ser inferior que o igual al valor de precisión. La escala predeterminada es 0, si no se especifica. La escala máxima es 37.  
Si la escala de un valor de entrada que se carga en una tabla es mayor que la escala de la columna, el valor se redondea a la escala especificada. Por ejemplo, la columna PRICEPAID de la tabla SALES es una columna DECIMAL(8,2). Si se inserta un valor DECIMAL(8,4) en la columna PRICEPAID, el valor se redondea a una escala de 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)
```
 Sin embargo, no se redondean los resultados de formas explícitas de los valores seleccionados de tablas.

**nota**  
El valor positivo máximo que puede insertar en una columna DECIMAL(19,0) es `9223372036854775807` (263 -1). El valor negativo máximo es `-9223372036854775807`. Por ejemplo, un intento de insertar el valor `9999999999999999999` (19 nueves) provocará un error de desbordamiento. Independientemente de la ubicación del punto decimal, la cadena de mayor tamaño que AWS Clean Rooms puede representar como un número DECIMAL es `9223372036854775807`. Por ejemplo, el valor más grande que puede cargar en una columna DECIMAL(19,18) es `9.223372036854775807`.  
Estas reglas se deben a los motivos siguientes:   
Los valores DECIMAL con 19 dígitos de precisión significativos o menos se almacenan internamente como enteros de 8 bytes.
Los valores DECIMAL con entre 20 y 38 dígitos de precisión significativos se almacenan como enteros de 16 bytes.

## Notas acerca del uso de las columnas DECIMAL o NUMERIC de 128 bits
<a name="Numeric_types-notes-about-using-128-bit-decimal-or-numeric-columns"></a>

No asigne arbitrariamente la precisión máxima de las columnas DECIMAL a menos que esté seguro de que la aplicación requiere esa precisión. Los valores de 128 bits utilizan el doble de espacio en el disco en comparación de los valores de 64 bits y pueden alargar el tiempo de ejecución de la consulta. 

# Tipos de números en coma flotante
<a name="Numeric_types-floating-point-types"></a>

Use el tipo de datos REAL o DOUBLE PRECISION para almacenar valores numéricos con *precisión variable*. Estos tipos son *inexactos*, lo que significa que algunos valores se almacenan como aproximaciones, por lo que puede haber pequeñas discrepancias al almacenar y devolver un valor específico. Si requiere almacenamiento y cálculos exactos (como para importes monetarios), use el tipo de datos DECIMAL.

REAL representa el formato de coma flotante de precisión simple, según la norma IEEE 754 de aritmética de coma flotante. Tiene una precisión de unos 6 dígitos y un intervalo de 1E-37 a 1E\$137 aproximadamente. También puede especificar este tipo de datos como. FLOAT4

DOUBLE PRECISION representa el formato de coma flotante de doble precisión, según la norma IEEE 754 para la aritmética binaria de coma flotante. Tiene una precisión de unos 15 dígitos y un intervalo de 1E-307 a 1E\$1308 aproximadamente. También puede especificar este tipo de datos como FLOAT o FLOAT8.

# Cómputos con valores numéricos
<a name="Numeric_computations"></a>

En AWS Clean Rooms, *la computación* se refiere a las operaciones matemáticas binarias: suma, resta, multiplicación y división. En esta sección se describen los tipos devueltos previstos para estas operaciones, así como la fórmula específica que se aplica para determinar la precisión y la escala cuando hay tipos de datos DECIMAL involucrados. 

Cuando se computan los valores numéricos durante el procesamiento de consultas, puede encontrar casos donde el cómputo no es posible y la consulta devuelve un error de desbordamiento numérico. También puede encontrar casos donde una escala de valores computados varía o es inesperada. Para algunas operaciones, puede usar formas explícitas (tipo de promoción) o parámetros de configuración de AWS Clean Rooms para solucionar estos problemas. 

Para obtener más información acerca de los resultados de cálculo similares con funciones SQL, consulte [AWS Clean Rooms Funciones de Spark SQL](sql-functions-topic-spark.md). 

## Tipos devueltos para cómputos
<a name="Numeric_computations-return-types"></a>

Dado el conjunto de tipos de datos numéricos admitidos AWS Clean Rooms, la siguiente tabla muestra los tipos de rendimiento esperados para las operaciones de suma, resta, multiplicación y división. La primera columna del lado izquierdo de la tabla representa el primer operando del cálculo, y la fila superior representa el segundo operando. 

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

## Precisión y escala de resultados DECIMAL computados
<a name="Numeric_computations-precision-and-scale-of-computed-decimal-results"></a>

En la siguiente tabla se resumen las reglas para computar la precisión y la escala resultantes cuando las operaciones matemáticas devuelven resultados DECIMAL. En esta tabla, `p1` `s1` represente la precisión y la escala del primer operando de un cálculo. `p2`y `s2` representan la precisión y la escala del segundo operando. (Independientemente de estos cálculos, la precisión de resultados máxima es 38 y la escala de resultados máxima es 38). 

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

Por ejemplo, las columnas PRICEPAID y COMMISSION de la tabla SALES son columnas DECIMAL(8,2). Si divide PRICEPAID por COMMISSION (o viceversa), la fórmula se aplica de la siguiente manera: 

```
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)
```

El siguiente cálculo es la regla general para computar la precisión y la escala resultantes para operaciones realizadas en valores DECIMAL con operadores como UNION, INTERSECT o EXCEPT, o funciones como COALESCE y DECODE: 

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

Por ejemplo, una DEC1 tabla con una columna DECIMAL (7,2) se une a una DEC2 tabla con una columna DECIMAL (15,3) para crear una tabla. DEC3 El esquema de DEC3 muestra que la columna se convierte en una columna NUMÉRICA (15,3). 

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

En el ejemplo anterior, la fórmula se aplica de la siguiente manera: 

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

Scale = max(2,3) = 3

Result = DECIMAL(15,3)
```

## Notas sobre las operaciones de división
<a name="Numeric_computations-notes-on-division-operations"></a>

En las operaciones de división, divide-by-zero las condiciones devuelven errores. 

El límite de escala de 100 se aplica después de que se calculan la precisión y la escala. Si la escala resultante calculada es superior a 100, los resultados de la división están escalados de la siguiente manera:
+ Precisión = ` precision - (scale - max_scale)` 
+ Escalado = ` max_scale ` 

Si la precisión calculada es superior a la precisión máxima (38), la precisión se reduce a 38 y la escala se convierte en el resultado de: `max(38 + scale - precision), min(4, 100))` 

## Condiciones de desbordamiento
<a name="Numeric_computations-overflow-conditions"></a>

Se revisa el desbordamiento para todos los cómputos numéricos. Los datos DECIMAL con una precisión de 19 o menos se almacenan como enteros de 64 bits. Los datos DECIMAL con una precisión superior a 19 se almacenan como enteros de 128 bits. La precisión máxima para todos los valores DECIMAL es 38 y la escala máxima es 37. Los errores de desbordamiento ocurren cuando un valor supera estos límites, que se aplican en los conjuntos de resultados intermedios y finales: 
+ La conversión explícita provoca errores de desbordamiento del tiempo de ejecución cuando valores de datos específicos no se ajustan a la precisión o escala solicitadas especificadas por la función de conversión. Por ejemplo, no se puede transformar todos los valores de la columna PRICEPAID de la tabla SALES (una columna DECIMAL(8,2)) y devolver un resultado DECIMAL(7,3): 

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

  Este error se produce porque *algunos* de los valores más grandes de la columna PRICEPAID no se pueden transformar.
+ Las operaciones de multiplicación producen resultados en los que la escala de resultados es la suma de la escala de cada operando. Si ambos operandos tienen una escala de 4, por ejemplo, la escala resultante es 8, dejando solo 10 dígitos para el lado izquierdo del punto decimal. Por lo tanto, es relativamente fácil encontrarse con condiciones de desbordamiento cuando multiplica dos números grandes que tienen escalas significativas.

## Cálculos numéricos con tipos INTEGER y DECIMAL
<a name="Numeric_computations-numeric-calculations-with-integer-and-decimal-types"></a>

Cuando uno de los operandos de un cálculo tiene un tipo de datos INTEGER y el otro operando es DECIMAL, el operando INTEGER se forma implícitamente como DECIMAL. 
+ SMALLINT o SHORT se convierten en DECIMAL (5,0) 
+ INTEGER se forma como DECIMAL(10,0) 
+ BIGINT o LONG se convierte en DECIMAL (19,0) 

Por ejemplo, si multiplica SALES.COMMISSION, una columna DECIMAL(8,2), y SALES.QTYSOLD, una columna SMALLINT, este cálculo se forma de la siguiente manera: 

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