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
La discussion suivante décrit le fonctionnement des règles de conversion de type et de compatibilité des types de données dans AWS Clean Rooms.
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 que la mise en one-to-one correspondance d'une certaine valeur et d'un certain type de données n'est pas toujours requise. Certains types de données étant compatibles, une conversion implicite, ou coercition, est possible. Pour plus d’informations, consultez 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 renforcent les conditions de débordement qui se produisent lorsque vous tentez d'insérer out-of-range des valeurs. 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'un nombre décimal n'est jamais tronqué. Cependant, la partie fractionnaire d'une décimale peut être arrondie à la hausse ou à la baisse, 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 colonne 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'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 à 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.
-
Lors de la conversion de DATE ou TIMESTAMP en TIMESTAMPTZ, ou de la conversion de TIME en TIMESTAMP, le fuseau horaire de la session en cours. Le fuseau horaire de session est UTC par défaut.
-
De même, TIMESTAMPTZ est converti en DATE, TIME ou TIMESTAMP en fonction du fuseau horaire de la session en cours. Le fuseau horaire de session est UTC par défaut. Après la conversion, les informations sur les fuseaux horaires sont abandonnées.
-
Les chaînes de caractères qui représentent un horodatage avec un fuseau horaire spécifié sont converties en TIMESTAMPTZ en utilisant le fuseau horaire de la session actuelle, qui est UTC par défaut. De même, les chaînes de caractères qui représentent un fuseau horaire spécifié sont converties en TIPZ à l’aide du fuseau horaire de la session en cours, UTC par défaut.
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 les comparaisons dans la clause WHERE
Le tableau suivant répertorie les types de données qui peuvent être convertis implicitement dans des assignations 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 | |
VARCHAR | |
CHAR | VARCHAR |
DATE | CHAR |
VARCHAR | |
TIMESTAMP | |
TIMESTAMPTZ | |
DECIMAL (NUMERIC) | BIGINT |
CHAR | |
DOUBLE PRECISION (FLOAT8) | |
ENTIER (INT) | |
REAL (FLOAT4) | |
SMALLINT | |
VARCHAR | |
DOUBLE PRECISION (FLOAT8) | BIGINT |
CHAR | |
DECIMAL (NUMERIC) | |
ENTIER (INT) | |
REAL (FLOAT4) | |
SMALLINT | |
VARCHAR | |
ENTIER (INT) | BIGINT |
BOOLEAN | |
CHAR | |
DECIMAL (NUMERIC) | |
DOUBLE PRECISION (FLOAT8) | |
REAL (FLOAT4) | |
SMALLINT | |
VARCHAR | |
REAL (FLOAT4) | BIGINT |
CHAR | |
DECIMAL (NUMERIC) | |
ENTIER (INT) | |
SMALLINT | |
VARCHAR | |
SMALLINT | BIGINT |
BOOLEAN | |
CHAR | |
DECIMAL (NUMERIC) | |
DOUBLE PRECISION (FLOAT8) | |
ENTIER (INT) | |
REAL (FLOAT4) | |
VARCHAR | |
TIMESTAMP | CHAR |
DATE | |
VARCHAR | |
TIMESTAMPTZ | |
TIME | |
TIMESTAMPTZ | CHAR |
DATE | |
VARCHAR | |
TIMESTAMP | |
TIMETZ | |
TIME | VARCHAR |
TIMETZ | |
TIMETZ | VARCHAR |
TIME |
Note
Les conversions implicites entre TIMESTAMPTZ, TIMESTAMP, DATE, TIME, TIMETZ ou les chaînes de caractères utilisent le fuseau horaire actuel de la session.
Le type de données VARBYTE ne peut pas être converti de façon implicite dans un autre type de données. Pour plus d'informations, voir Fonction CAST.