Kategorien:

Konvertierungsfunktionen

CAST, ::

Konvertiert einen Wert von einem Datentyp in einen anderen Datentyp. Die Semantik von CAST stimmt mit der Semantik der entsprechenden TO_ datatype-Konvertierungsfunktionen überein. Wenn die Umwandlung nicht möglich ist, wird ein Fehler erzeugt. Weitere Informationen dazu finden Sie unter den einzelnen TO_ datatype-Konvertierungsfunktionen. Weitere Informationen zur Datentypkonvertierung und zu den TO_ datatype-Konvertierungsfunktionen finden Sie unter Datentypkonvertierung.

Der ::-Operator bietet eine alternative Syntax für CAST.

Siehe auch:

TRY_CAST

Syntax

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

<source_expr> :: <target_data_type>
Copy

Argumente

source_expr

Ausdruck eines beliebigen unterstützten Datentyps, der in einen anderen Datentyp konvertiert werden soll.

target_data_type

Der Datentyp, in den der Ausdruck konvertiert werden soll. Wenn der Datentyp zusätzliche Eigenschaften wie Genauigkeit und Skalierung (bei Zahlen/Dezimalzahlen) unterstützt, können die Eigenschaften eingeschlossen werden.

RENAME FIELDS

Gibt bei strukturierten OBJECTs an, dass Sie das OBJECT-Objekt ändern möchten, um andere Schlüssel-Wert-Paare zu verwenden. Die Werte im ursprünglichen Objekt werden in der Reihenfolge, in der sie erscheinen, in die neuen Schlüssel-Wert-Paare kopiert.

Ein Beispiel dazu finden Sie unter Beispiel: Ändern der Schlüsselnamen eines OBJECT-Typs.

ADD FIELDS

Gibt bei strukturierten OBJECTs an, dass Sie Schlüssel-Wert-Paare zu dem OBJECT-Objekt hinzufügen möchten.

Ein Beispiel dazu finden Sie unter Beispiel: Hinzufügen von Schlüsseln zu einem OBJECT-Typ.

Die Werte für die neu hinzugefügten Schlüssel werden auf NULL gesetzt. Wenn Sie diesen Schlüsseln einen Wert zuweisen möchten, rufen Sie stattdessen die Funktion OBJECT_INSERT auf.

Nutzungshinweise

  • Wenn die Skalierung nicht ausreicht, um den Eingangswert in der gegebenen Form beizubehalten, rundet die Funktion den Wert.

  • Wenn die Genauigkeit nicht ausreicht, um den Eingabewert in der gegebenen Form beizubehalten, gibt die Funktion einen Fehler aus.

  • Wenn numerische Spalten beim Entladen von Daten in Parquet-Dateien explizit in Formen des Ganzzahl-Datentyps umgewandelt werden, ist der Datentyp dieser Spalten in den Parquet-Dateien INT. Weitere Informationen dazu finden Sie unter Explizites Konvertieren numerischer Spalten in Parquet-Datentypen.

  • Wenn Sie die alternative ::-Syntax verwenden, können Sie die Argumente RENAME FIELDS oder ADD FIELDS nicht angeben.

Beispiele

Die CAST-Beispiele verwenden die Daten in der folgenden Tabelle:

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 |
+---------------+--------------+-------------------------+

Die Beispiele verwenden die Funktion SYSTEM$TYPEOF, um den Datentyp des konvertierten Wertes anzuzeigen.

Konvertieren einer Zeichenfolge in eine Zahl mit angegebener Dezimalstellenzahl (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] |
+--------------------+------------------+

Konvertieren derselben Zeichenfolge in eine Dezimalzahl mit Dezimalstellenzahl 5 unter Verwendung der ::-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] |
+--------------------+------------------+

Umwandeln einer Zahl in eine Ganzzahl: Bei einer Ganzzahl können Präzision und Dezimalstellenzahl nicht angegeben werden, daher ist die Vorgabe immer 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] |
+-------------------+-------------------+

Konvertieren einer Zahl in eine Zeichenfolge:

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] |
+-------------------+------------------------+

Konvertieren eines Zeitstempels in ein Datum:

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] |
+-------------------+-----------+