Catégories :

Fonctions de conversion

CAST , ::

Convertit une valeur d’un type de données en un autre type de données. La sémantique de CAST est identique à celle des fonctions de conversion TO_ datatype correspondantes. Si la conversion n’est pas possible, une erreur est générée. Pour plus de détails, voir les fonctions de conversion TO_ datatype individuelles. Pour plus d’informations sur la conversion de types de données et les fonctions de conversion TO_ datatype, voir Conversion de type de données.

L’opérateur :: fournit une syntaxe alternative pour CAST.

Voir aussi :

TRY_CAST

Syntaxe

CAST( <source_expr> AS <target_data_type> )
  [ RENAME FIELDS | ADD FIELDS ]

<source_expr> :: <target_data_type>
Copy

Arguments

source_expr

Expression de tout type de données pris en charge à convertir en un type de données différent.

target_data_type

Le type de données vers lequel convertir l’expression. Si le type de données prend en charge des propriétés supplémentaires, telles que la précision et l’échelle (pour les nombres / décimales), les propriétés peuvent être incluses.

RENAME FIELDS

Pour des OBJECTs structurés, indique que vous souhaitez modifier l’OBJECT pour pouvoir utiliser des paires clé-valeur différentes. Les valeurs de l’objet d’origine sont copiées dans les nouvelles paires clé-valeur dans l’ordre dans lequel elles apparaissent.

Pour un exemple, voir Exemple : modification des noms de clé d’un OBJECT.

ADD FIELDS

Pour des OBJECTs structurés, indique que vous souhaitez ajouter des paires clé-valeur à l’OBJECT.

Pour un exemple, voir Exemple : ajout de clés à un OBJECT.

Les valeurs des nouvelles clés ajoutées seront définies sur NULL. Si vous souhaitez attribuer une valeur à ces clés, appelez plutôt la fonction OBJECT_INSERT.

Notes sur l’utilisation

  • Si l’échelle n’est pas suffisante pour maintenir la valeur d’entrée, la fonction arrondit la valeur.

  • Si la précision n’est pas suffisante pour maintenir la valeur d’entrée, la fonction signale une erreur.

  • Lorsque des colonnes numériques sont explicitement converties en formulaires du type de données entier pendant un déchargement de données vers des fichiers Parquet, le type de données de ces colonnes dans les fichiers Parquet est INT. Pour plus d’informations, voir Conversion explicite de colonnes numériques en types de données Parquet.

  • Lorsque vous utilisez la syntaxe alternative ::, vous ne pouvez pas spécifier les arguments RENAME FIELDS ni ADD FIELDS.

Exemples

Les exemples de CAST utilisent les données du tableau suivant :

CREATE OR REPLACE TABLE test_data_type_conversion (
  varchar_value VARCHAR,
  number_value NUMBER(5, 4),
  timestamp_value TIMESTAMP);

INSERT INTO test_data_type_conversion VALUES (
  '9.8765',
  1.2345,
  '2024-05-09 14:32:29.135 -0700');

SELECT * FROM test_data_type_conversion;
Copy
+---------------+--------------+-------------------------+
| VARCHAR_VALUE | NUMBER_VALUE | TIMESTAMP_VALUE         |
|---------------+--------------+-------------------------|
| 9.8765        |       1.2345 | 2024-05-09 14:32:29.135 |
+---------------+--------------+-------------------------+

Les exemples utilisent la fonction SYSTEM$TYPEOF pour indiquer le type de données de la valeur convertie.

Convertissez une chaîne en nombre à l’échelle spécifiée (2) :

SELECT CAST(varchar_value AS NUMBER(5,2)) AS varchar_to_number1,
       SYSTEM$TYPEOF(varchar_to_number1) AS data_type
  FROM test_data_type_conversion;
Copy
+--------------------+------------------+
| VARCHAR_TO_NUMBER1 | DATA_TYPE        |
|--------------------+------------------|
|               9.88 | NUMBER(5,2)[SB4] |
+--------------------+------------------+

Convertissez la même chaîne en nombre à l’échelle 5, en utilisant la notation :: :

SELECT varchar_value::NUMBER(6,5) AS varchar_to_number2,
       SYSTEM$TYPEOF(varchar_to_number2) AS data_type
  FROM test_data_type_conversion;
Copy
+--------------------+------------------+
| VARCHAR_TO_NUMBER2 | DATA_TYPE        |
|--------------------+------------------|
|            9.87650 | NUMBER(6,5)[SB4] |
+--------------------+------------------+

Convertissez un nombre en entier. Pour un entier, la précision et l’échelle ne peuvent pas être spécifiées, de sorte que la valeur par défaut est toujours NUMBER(38, 0).

SELECT CAST(number_value AS INTEGER) AS number_to_integer,
       SYSTEM$TYPEOF(number_to_integer) AS data_type
  FROM test_data_type_conversion;
Copy
+-------------------+-------------------+
| NUMBER_TO_INTEGER | DATA_TYPE         |
|-------------------+-------------------|
|                 1 | NUMBER(38,0)[SB1] |
+-------------------+-------------------+

Convertissez un nombre en chaîne :

SELECT CAST(number_value AS VARCHAR) AS number_to_varchar,
       SYSTEM$TYPEOF(number_to_varchar) AS data_type
  FROM test_data_type_conversion;
Copy
+-------------------+------------------------+
| NUMBER_TO_VARCHAR | DATA_TYPE              |
|-------------------+------------------------|
| 1.2345            | VARCHAR(16777216)[LOB] |
+-------------------+------------------------+

Convertissez un horodatage en date :

SELECT CAST(timestamp_value AS DATE) AS timestamp_to_date,
       SYSTEM$TYPEOF(timestamp_to_date) AS data_type
  FROM test_data_type_conversion;
Copy
+-------------------+-----------+
| TIMESTAMP_TO_DATE | DATA_TYPE |
|-------------------+-----------|
| 2024-05-09        | DATE[SB4] |
+-------------------+-----------+