Compatibilité et conversion de types - AWS Clean Rooms

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 le fonctionnement des règles de conversion de type et de compatibilité des types de données dans AWS Clean Rooms 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 du langage de manipulation des données (DML) sur les tables

  • UNIONINTERSECT, et EXCEPT requêtes

  • CASEexpressions

  • Évaluation de prédicats, tels que LIKE et IN

  • Évaluation des SQL fonctions 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 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 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. VARCHARles chaînes de colonnes contenant des données à un octet et les chaînes de CHAR colonnes sont comparables et implicitement convertibles. VARCHARles chaînes contenant des données multioctets 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 DECIMAL des valeurs avec des chaînes de caractères, AWS Clean Rooms tente de convertir la chaîne de caractères en DECIMAL valeur. 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 appliquer la conversion inverse (par exemple, convertir des chaînes de caractères en entiers ou convertir des DECIMAL valeurs en chaînes de caractères), utilisez une fonction explicite, telle queFonction CAST.

  • Pour convertir des NUMERIC valeurs 64 bits DECIMAL ou en une précision supérieure, vous devez utiliser une fonction de conversion explicite telle que les CONVERT fonctions CAST or.

  • Lors de la conversionTIMESTAMPTZ, TIMESTAMP vers DATE ou TIME versTIMETZ, le fuseau horaire est défini sur le fuseau horaire de la session en cours. Le fuseau horaire de la session est UTC défini par défaut.

  • De même, TIMESTAMPTZ est converti en DATETIME, ou TIMESTAMP basé sur le fuseau horaire de la session en cours. Le fuseau horaire de la session est UTC défini 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 le fuseau horaire spécifié sont converties en TIMESTAMPTZ utilisant le fuseau horaire de la session en cours, qui est UTC par défaut. De même, les chaînes de caractères qui représentent une heure avec le fuseau horaire spécifié sont converties en TIMETZ utilisant le fuseau horaire de la session en cours, qui est 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 INSERT ou de UPDATE commandes

  • Conversions implicites dans les expressions, telles que la réalisation de comparaisons dans la WHERE clause

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 ou SHORT
VARCHAR
CHAR VARCHAR
DATE CHAR
VARCHAR
TIMESTAMP
TIMESTAMPTZ
DECIMAL (NUMERIC) BIGINT ou LONG
CHAR
DOUBLE PRECISION (FLOAT8)
INTEGER INT)
REAL (FLOAT4)
SMALLINT ou SHORT
VARCHAR
DOUBLE PRECISION (FLOAT8) BIGINT ou LONG
CHAR
DECIMAL (NUMERIC)
INTEGER (INT)
REAL (FLOAT4)
SMALLINT ou SHORT
VARCHAR
INTEGER (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)
INTEGER (INT)
SMALLINT ou SHORT
VARCHAR
SMALLINT BIGINT ou LONG
BOOLEAN
CHAR
DECIMAL (NUMERIC)
DOUBLE PRECISION (FLOAT8)
INTEGER (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 TIMESTAMPTZTIMESTAMP,,DATE, TIMETIMETZ, ou chaînes de caractères utilisent le fuseau horaire de la session en cours.

Le type de VARBYTE données ne peut pas être converti implicitement en un autre type de données. Pour de plus amples informations, veuillez consulter Fonction CAST.