Conversión y compatibilidad de tipos - AWS Clean Rooms

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.

Conversión y compatibilidad de tipos

El siguiente análisis describe cómo funcionan las reglas de conversión de tipos y la compatibilidad de tipos de datos en AWS Clean Rooms.

Compatibilidad

La vinculación de tipos de datos y la vinculación de valores literales y constantes con tipos de datos ocurren durante varias operaciones de la base de datos, incluidas las siguientes:

  • Operaciones de Data Manipulation Language (DML, Lenguaje de manipulación de datos) en tablas

  • Consultas UNION, INTERSECT y EXCEPT

  • Expresiones CASE

  • Evaluación de predicados, como LIKE e IN

  • La evaluación de funciones SQL que realizan comparaciones o extracciones de datos.

  • Comparaciones con operadores matemáticos

Los resultados de estas operaciones dependen de las reglas de conversión de tipos y la compatibilidad de tipos de datos. La compatibilidad implica que no siempre es necesaria la one-to-one coincidencia de un determinado valor y un determinado tipo de datos. Dado que algunos tipos de datos son compatible, es posible una conversión implícita o coerción. Para obtener más información, consulte Tipos de conversiones implícitas. Cuando los tipos de datos no son compatibles, a menudo puede convertir un valor de un tipo de datos a otro al utilizar la función de conversión explícita.

Reglas generales de conversión y compatibilidad

Tenga en cuenta las siguientes reglas de conversión y compatibilidad:

  • En general, los tipos de datos que caen en la misma categoría (como diferentes tipos de datos numéricos) son compatibles y se pueden convertir implícitamente.

    Por ejemplo, con la conversión implícita puede insertar un valor decimal en una columna de enteros. El decimal se redondea para producir un número entero. O bien, puede extraer un valor numérico, como 2008, de una fecha e insertar ese valor en una columna de enteros.

  • Los tipos de datos numéricos imponen condiciones de desbordamiento que se producen cuando se intenta insertar out-of-range valores. Por ejemplo, un valor decimal con una precisión de 5 no encaja en una columna decimal que se definió con una precisión de 4. Un entero o toda la parte de un decimal nunca se truncan. Sin embargo, la parte fraccionaria de un decimal se puede redondear hacia arriba o hacia abajo, según corresponda. Sin embargo, no se redondean los resultados de formas explícitas de los valores seleccionados de tablas.

  • Los distintos tipos de cadenas de caracteres son compatibles. Las cadenas de la columna VARCHAR que contienen datos de un byte y las cadenas de la columna CHAR se pueden comparar y son convertibles de manera implícita. No se pueden comparar las cadenas VARCHAR que contienen datos multibyte. También puede convertir una cadena de caracteres a una fecha, una hora, una marca temporal o un valor numérico si la cadena es un valor literal adecuado. Se omiten los espacios anteriores o posteriores. En cambio, puede convertir una fecha, una hora, una marca temporal o un valor numérico a una cadena de caracteres de longitud fija o variable.

    nota

    Una cadena de caracteres que desea transformar a un tipo numérico debe contener una representación de carácter de un número. Por ejemplo, puede transformar las cadenas '1.0' o '5.9' a valores decimales, pero no puede transformar la cadena 'ABC' a ningún tipo numérico.

  • Si compara valores DECIMALES con cadenas de caracteres, AWS Clean Rooms intenta convertir la cadena de caracteres en un valor DECIMAL. Al comparar todos los demás valores numéricos con cadenas de caracteres, los valores numéricos se convierten en cadenas de caracteres. Para aplicar la conversión opuesta (por ejemplo, convertir cadenas de caracteres en números enteros o convertir valores de tipo DECIMAL en cadenas de caracteres), utilice una función explícita, como Función CAST.

  • Para convertir valores DECIMAL o NUMERIC de 64 bits a una precisión más grande, debe usar una función de conversión explícita, como las funciones CAST o CONVERT.

  • Al convertir DATE o TIMESTAMP a TIMESTAMPTZ, o bien, convertir TIME a TIMETZ, la zona horaria se establece como la zona de la sesión actual. Por defecto, la zona horaria de la sesión es UTC.

  • De manera similar, TIMESTAMPTZ se convierte a DATE, TIME o TIMESTAMP en función de la zona horaria de la sesión actual. Por defecto, la zona horaria de la sesión es UTC. Después de la conversión, se elimina la información de la zona horaria.

  • Las cadenas de caracteres que representan una marca temporal con zona horaria especificada se convierten a TIMESTAMPTZ con la zona horaria de la sesión actual, que es la UTC de forma predeterminada. Del mismo modo, las cadenas de caracteres que representan una hora con zona horaria especificada se convierten a TIMETZ con la zona horaria de la sesión actual, que es la UTC de forma predeterminada.

Tipos de conversiones implícitas

Existen dos tipos de conversiones implícitas:

  • Conversiones implícitas en asignaciones, como establecer valores en comandos INSERT o UPDATE

  • Conversiones implícitas en expresiones, como realizar comparaciones en la cláusula WHERE

En la siguiente tabla se enumeran los tipos de datos que pueden convertirse implícitamente en asignaciones o expresiones. También puede usar una función de conversión explícita para realizar estas conversiones.

Del tipo Al tipo
BIGINT BOOLEAN
CHAR
DECIMAL (NUMERIC)
DOUBLE PRECISION (FLOAT8)
INTEGER
REAL (FLOAT4)
SMALLINT
VARCHAR
CHAR VARCHAR
FECHA CHAR
VARCHAR
MARCA DE TIEMPO
TIMESTAMPTZ
DECIMAL (NUMERIC) BIGINT
CHAR
DOUBLE PRECISION (FLOAT8)
INTEGER (INT)
REAL (FLOAT4)
SMALLINT
VARCHAR
DOUBLE PRECISION (FLOAT8) BIGINT
CHAR
DECIMAL (NUMERIC)
INTEGER (INT)
REAL (FLOAT4)
SMALLINT
VARCHAR
INTEGER (INT) BIGINT
BOOLEAN
CHAR
DECIMAL (NUMERIC)
DOUBLE PRECISION (FLOAT8)
REAL (FLOAT4)
SMALLINT
VARCHAR
REAL (FLOAT4) BIGINT
CHAR
DECIMAL (NUMERIC)
INTEGER (INT)
SMALLINT
VARCHAR
SMALLINT BIGINT
BOOLEAN
CHAR
DECIMAL (NUMERIC)
DOUBLE PRECISION (FLOAT8)
INTEGER (INT)
REAL (FLOAT4)
VARCHAR
MARCA DE TIEMPO CHAR
FECHA
VARCHAR
TIMESTAMPTZ
HORA
TIMESTAMPTZ CHAR
FECHA
VARCHAR
MARCA DE TIEMPO
TIMETZ
HORA VARCHAR
TIMETZ
TIMETZ VARCHAR
HORA
nota

Las conversiones implícitas entre TIMESTAMPTZ, TIMESTAMP, DATE, TIME, TIMETZ o cadenas de caracteres utilizan la zona horaria de la sesión actual.

El tipo de datos VARBYTE no se puede convertir de forma implícita en otros tipos de datos. Para obtener más información, consulte Función CAST.