- Kategorien:
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:
Syntax¶
CAST( <source_expr> AS <target_data_type> )
[ RENAME FIELDS | ADD FIELDS ]
<source_expr> :: <target_data_type>
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 ArgumenteRENAME FIELDS
oderADD 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;
+---------------+--------------+-------------------------+
| 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;
+--------------------+------------------+
| 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;
+--------------------+------------------+
| 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;
+-------------------+-------------------+
| 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;
+-------------------+------------------------+
| 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;
+-------------------+-----------+
| TIMESTAMP_TO_DATE | DATA_TYPE |
|-------------------+-----------|
| 2024-05-09 | DATE[SB4] |
+-------------------+-----------+