Amazon Redshift unterstützt ab dem 1. November 2025 nicht mehr die Erstellung neuer Python-UDFs. Wenn Sie Python-UDFs verwenden möchten, erstellen Sie die UDFs vor diesem Datum. Bestehende Python-UDFs funktionieren weiterhin wie gewohnt. Weitere Informationen finden Sie im Blog-Posting
TRY_CAST-Funktion
Im Vergleich zur CAST-Funktion versucht TRY_CAST zunächst, den Ausdruck in den angegebenen Typ umzuwandeln. Wenn die Umwandlung aufgrund von Konvertierungsfehlern fehlschlägt, gibt der Vorgang Null zurück. Wenn eine Konvertierung nicht ausdrücklich zulässig ist, gibt der Vorgang einen Fehler zurück. Die Liste der möglichen Konvertierungen finden Sie in den folgenden Nutzungshinweisen. Der Versuch, einen booleschen Wert in einen Zeitstempel zu konvertieren, ist beispielsweise nicht zulässig.
Syntax
TRY_CAST(expression AS type)
Argumente
- expression
-
Ein Ausdruck, der einen oder mehrere Werte auswertet, beispielsweise ein Spaltenname oder ein Literal. Die Konvertierung von Null-Werten gibt Null-Werte zurück. Der Ausdruck darf keine leeren Zeichenfolgen enthalten.
- Typ
-
Einer der unterstützten Datentypen. Eine vollständige Liste von Datentypen finden Sie unter Datentypen. Eine Liste der unterstützten Paare von Quell- und Zieldatentyp finden Sie in den folgenden Verwendungshinweisen.
Rückgabetyp
TRY_CAST gibt den Datentyp zurück, der durch das Argument type angegeben ist. Wenn die Konvertierung fehlschlägt, gibt der Vorgang Null zurück.
Nutzungshinweise
Im Folgenden finden Sie die Liste der Quell- und Zieldatentyppaare, die Amazon Redshift für TRY_CAST unterstützt.
- BOOL
-
SMALLINT, INT, BIGINT, SUPER
- SMALLINT
-
BOOL, INT, BIGINT, DECIMAL, REAL, FLOAT, BPCHAR, TEXT, VARCHAR, SUPER
- INT
-
BOOL, SMALLINT, BIGINT, DECIMAL, REAL, FLOAT, BPCHAR, TEXT, VARCHAR, SUPER
- BIGINT
-
BOOL, SMALLINT, INT, DECIMAL, REAL, FLOAT, BPCHAR, TEXT, VARCHAR, SUPER
- DECIMAL
-
SMALLINT, INT, BIGINT, REAL, FLOAT, BPCHAR, TEXT, VARCHAR, SUPER
- REAL
-
SMALLINT, INT, BIGINT, DECIMAL, FLOAT, BPCHAR, TEXT, VARCHAR, SUPER
- FLOAT
-
MALLINT, INT, BIGINT, DECIMAL, REAL, BPCHAR, TEXT, VARCHAR, SUPER
- BPCHAR
-
SMALLINT, INT, BIGINT, DECIMAL, REAL, FLOAT, TEXT, VARCHAR, TIMESTAMP, TIMESTAMPTZ, DATE, TIME, TIMETZ, SUPER
- TEXT
-
SMALLINT, INT, BIGINT, DECIMAL, REAL, FLOAT, BPCHAR, VARCHAR, TIMESTAMP, TIMESTAMPTZ, DATE, TIME, TIMETZ, SUPER
- VARCHAR
-
SMALLINT, INT, BIGINT, DECIMAL, REAL, FLOAT, BPCHAR, TEXT, TIMESTAMP, TIMESTAMPTZ, DATE, TIME, TIMETZ, SUPER
- ZEITSTEMPEL
-
BPCHAR, TEXT, VARCHAR, TIMESTAMPTZ, DATE, TIME
- TIMESTAMPTZ
-
BPCHAR, TEXT, VARCHAR, TIMESTAMP, DATE, TIME, TIMETZ
- DATE
-
BPCHAR, TEXT, VARCHAR, TIMESTAMP, TIMESTAMPTZ
- TIME
-
BPCHAR, TEXT, VARCHAR
- TIMETZ
-
BPCHAR, TEXT, VARCHAR
- SUPER
-
SUPER kann in jeden anderen Datentyp konvertiert werden, mit Ausnahme von DATE, TIME, TIMETZ, TIMESTAMP und TIMESTAMPTZ.
Beispiele
Das folgende Beispiel wandelt einen STRING in einen INTEGER-Wert um.
SELECT TRY_CAST('123' AS INT);int ---- 123
Im folgenden Beispiel wird Null zurückgegeben. Die Konvertierung von STRING zu INTEGER ist zulässig, so dass TRY_CAST keinen Fehler zurückgibt, aber 'foo' ist keine Ganzzahl, so dass die Funktion Null zurückgibt.
SELECT TRY_CAST('foo' AS INT)
Das folgende Beispiel gibt einen Fehler zurück, da die Konvertierung von BOOLEAN zu TIMESTAMP nicht zulässig ist.
SELECT TRY_CAST(true as timestamp);
Da TRY_CAST Null zurückgibt, anstatt sofort einen Fehler zurückzugeben, wenn die Konvertierung fehlschlägt, können Sie TRY_CAST verwenden, um ungültige Daten herauszufiltern. Betrachten Sie das folgende Beispiel, in dem eine ungültige Zeile aufgrund eines Konvertierungsfehlers in der Altersspalte für Akua Mansa herausgefiltert wird.
CREATE TABLE IF NOT EXISTS student_data( name VARCHAR(100) NOT NULL, age VARCHAR(3) NOT NULL, enrollment_date DATE NOT NULL); INSERT INTO student_data (name, age, enrollment_date) VALUES ('Alejandro Rosalez', '10', '01/01/2000'), ('Akua Mansa', 'Ten', '01/01/2000'); SELECT * FROM student_data WHERE TRY_CAST(age AS INT) IS NOT NULL; --Akua is not returned. name | age | enrollment_date -------------------+-----+----------------- Alejandro Rosalez | 10 | 01/01/2000