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.