Tipos numéricos - Amazon Redshift

Tipos numéricos

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

Tipos de enteros

Use los tipos de datos SMALLINT, INTEGER y BIGINT para almacenar los números completos de varios rangos. No puede almacenar valores fuera del rango permitido para cada tipo.

Nombre Almacenamiento Range
SMALLINT o INT2 2 bytes De -32768 a +32767
INTEGER, INT o INT4 4 bytes De -2147483648 a 2147483647
BIGINT o INT8 8 bytes De -9223372036854775808 a 9223372036854775807

Tipo DECIMAL o NUMERIC

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.

Almacenamiento Range
Variable, hasta 128 bits para tipos DECIMAL sin comprimir. Los enteros firmados de 128 bits con hasta 38 dígitos de precisión.

Defina una columna DECIMAL en una tabla especificando una precisión y una escala:

decimal(precision, scale)
precisión

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 la cantidad 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 el valor a la columna (ni insertar ni actualizar). 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 -9223372036854775808. Por ejemplo, un intento de insertar el valor 9999999999999999999 (19 nueves) provocará un error de desbordamiento. Independientemente de la ubicación de la coma decimal, la cadena de mayor tamaño que Amazon Redshift 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 que los valores DECIMAL con 19 o menos dígitos significativos de precisión se almacenan internamente como números enteros de 8 bytes, mientras que los valores DECIMAL con una precisión de 20 a 38 dígitos significativos se almacenan como enteros de 16 bytes.

Notas acerca del uso de las columnas DECIMAL o NUMERIC de 128 bits

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

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 para la aritmética binaria de coma flotante. Tiene una precisión de unos 6 dígitos y un intervalo de 1E-37 a 1E+37 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+308 aproximadamente. También puede especificar este tipo de datos como FLOAT o FLOAT8.

Además de los valores numéricos normales, los tipos de punto flotante tienen varios valores especiales. Utilice estos valores entre comillas simples cuando los utilice en SQL:

  • NaN: no es un número

  • Infinity: infinito

  • -Infinity: infinito negativo

Por ejemplo, para insertar no es un número en la columna day_charge de la tabla customer_activity, ejecute el siguiente código SQL:

insert into customer_activity(day_charge) values('NaN');