TRY_CAST-Funktion - Amazon Redshift

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