Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Compatibilité et conversion de types
Les rubriques suivantes décrivent comment les règles de conversion de type et la compatibilité des types de données fonctionnent dans AWS Clean Rooms Spark SQL.
Compatibilité
La correspondance des types de données et la correspondance des valeurs littérales et des constantes avec les types de données se produisent lors de différentes opérations de base de données, dont les suivantes :
-
Opérations DML (Data Manipulation Language) sur les tables
-
Requêtes UNION, INTERSECT et EXCEPT
-
Expressions CASE
-
Evaluation de prédicats, tels que LIKE et IN
-
Evaluation de fonctions SQL qui effectuent des comparaisons ou des extractions de données
-
Comparaisons avec les opérateurs mathématiques
Les résultats de ces opérations dépendent des règles de conversion de types et de la compatibilité des types de données. La compatibilité implique qu’une correspondance un-à-un d’une certaine valeur et d’un certain type de données ne soit pas toujours obligatoire. Certains types de données étant compatibles, une conversion implicite, ou coercition, est possible. Pour de plus amples informations, veuillez consulter Types de conversion implicite. Lorsque les types de données sont incompatibles, vous pouvez parfois convertir une valeur d’un type de données en un autre à l’aide d’une fonction de conversion explicite.
Compatibilité générale et règles de conversion
Notez les règles de compatibilité et de conversion suivantes :
-
En général, les types de données qui appartiennent à la même catégorie (comme les différents types de données numériques) sont compatibles et peuvent être convertis implicitement.
Par exemple, avec une conversion implicite, vous pouvez insérer une valeur décimale dans une colonne de type entier. La partie décimale est arrondie pour produire un nombre entier. Ou vous pouvez extraire une valeur numérique, telle que
2008, d’une date et insérer cette valeur dans une colonne de type entier. -
Les types de données numériques appliquent les conditions de dépassement de capacité qui se produisent lorsque vous essayez d’insérer des valeurs en dehors de la plage. Par exemple, une valeur décimale avec une précision de 5 ne peut contenir dans une colonne décimale dont la précision est 4. Un entier ou la partie entière d'une décimale ne sont jamais tronqués. Cependant, la partie fractionnaire d'une décimale peut être arrondie vers le haut ou vers le bas, selon le cas. Cependant, les résultats de conversions explicites de valeurs sélectionnées dans les tables ne sont pas arrondis.
-
Différents types de chaînes de caractères sont compatibles. Les chaînes de colonnes VARCHAR contenant des données à un octet et les chaînes de colonnes CHAR sont comparables et implicitement convertibles. Les chaînes VARCHAR qui contiennent des données codées sur plusieurs octets ne sont pas comparables. Vous pouvez également convertir une chaîne de caractères en date, heure, horodatage ou valeur numérique si la chaîne est une valeur littérale appropriée. Les espaces de début ou de fin sont ignorés. Inversement, vous pouvez convertir une date, une heure, un horodatage ou une valeur numérique en une chaîne de caractères de longueur fixe ou variable.
Note
Une chaîne de caractères que vous voulez convertir en type numérique doit comporter la représentation en caractères d’un nombre. Par exemple, vous pouvez convertir les chaînes
'1.0'ou les convertir'5.9'en valeurs décimales, mais vous ne pouvez pas convertir la chaîne'ABC'en un type numérique. -
Si vous comparez des valeurs DECIMAL avec des chaînes de caractères, AWS Clean Rooms tente de convertir la chaîne de caractères en valeur DECIMAL. Lors de la comparaison de toutes les autres valeurs numériques avec des chaînes de caractères, les valeurs numériques sont converties en chaînes de caractères. Pour effectuer la conversion inverse (par exemple, convertir des chaînes de caractères en entiers ou convertir des valeurs DECIMALES en chaînes de caractères), utilisez une fonction explicite, telle que Fonction CAST.
-
Pour convertir les valeurs DECIMAL ou NUMERIC 64 bits en une plus grande précision, vous devez utiliser une fonction de conversion explicite telle que les fonctions CAST ou CONVERT.
Types de conversion implicite
Il existe deux types de conversion implicite :
-
Conversions implicites dans les affectations, telles que la définition de valeurs dans les commandes INSERT ou UPDATE
-
Conversions implicites dans les expressions, telles que la réalisation de comparaisons dans la clause WHERE
Le tableau suivant répertorie les types de données qui peuvent être convertis implicitement dans des affectations ou des expressions. Vous pouvez également utiliser une fonction de conversion explicite pour exécuter ces conversions.
| Type de départ | Type d’arrivée |
|---|---|
| BIGINT | BOOLEAN |
| CHAR | |
| DECIMAL (NUMERIC) | |
| DOUBLE PRECISION (FLOAT8) | |
| INTEGER | |
| REAL (FLOAT4) | |
| SMALLINT ou SHORT | |
| VARCHAR | |
| CHAR | VARCHAR |
| DATE | CHAR |
| VARCHAR | |
| TIMESTAMP | |
| TIMESTAMPTZ | |
| DECIMAL (NUMERIC) | BIGINT ou LONG |
| CHAR | |
| DOUBLE PRECISION (FLOAT8) | |
| ENTIER (INT) | |
| REAL (FLOAT4) | |
| SMALLINT ou SHORT | |
| VARCHAR | |
| DOUBLE PRECISION (FLOAT8) | BIGINT ou LONG |
| CHAR | |
| DECIMAL (NUMERIC) | |
| ENTIER (INT) | |
| REAL (FLOAT4) | |
| SMALLINT ou SHORT | |
| VARCHAR | |
| ENTIER (INT) | BIGINT ou LONG |
| BOOLEAN | |
| CHAR | |
| DECIMAL (NUMERIC) | |
| DOUBLE PRECISION (FLOAT8) | |
| REAL (FLOAT4) | |
| SMALLINT ou SHORT | |
| VARCHAR | |
| REAL (FLOAT4) | BIGINT ou LONG |
| CHAR | |
| DECIMAL (NUMERIC) | |
| ENTIER (INT) | |
| SMALLINT ou SHORT | |
| VARCHAR | |
| SMALLINT | BIGINT ou LONG |
| BOOLEAN | |
| CHAR | |
| DECIMAL (NUMERIC) | |
| DOUBLE PRECISION (FLOAT8) | |
| ENTIER (INT) | |
| REAL (FLOAT4) | |
| VARCHAR | |
| TIME | VARCHAR |
| TIMETZ |
Note
Les conversions implicites entre DATE, HEURE, TIMESTAMP_LTZ, TIMESTAMP_NTZ ou des chaînes de caractères utilisent le fuseau horaire de la session en cours.
Le type de données VARBYTE ne peut pas être converti de façon implicite dans un autre type de données. Pour de plus amples informations, veuillez consulter Fonction CAST.