Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
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 der Datentypen finden Sie unterDatentypen. Eine Liste der unterstützten Paare von Quell- und Zieldatentyp finden Sie in den folgenden Verwendungshinweisen.
Rückgabetyp
TRY_CAST gibt einen Wert des durch das Typargument angegebenen Datentyps zurück. 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, DEZIMAL, REAL, FLOAT, BPCHAR, TEXT, VARCHAR, SUPER
- INT
-
BOOL, SMALLINT, BIGINT, DEZIMAL, REAL, FLOAT, BPCHAR, TEXT, VARCHAR, SUPER
- BIGINT
-
BOOL, SMALLINT, INT, DEZIMAL, REAL, FLOAT, BPCHAR, TEXT, VARCHAR, SUPER
- DEZIMAL
-
SMALLINT, INT, BIGINT, REAL, FLOAT, BPCHAR, TEXT, VARCHAR, SUPER
- ECHT
-
SMALLINT, INT, BIGINT, DECIMAL, FLOAT, BPCHAR, TEXT, VARCHAR, SUPER
- SCHWEBEN
-
SMALLINT, INT, BIGINT, DEZIMAL, REAL, BPCHAR, TEXT, VARCHAR, SUPER
- BPCHAR
-
SMALLINT, INT, BIGINT, DEZIMAL, REAL, FLOAT, TEXT, VARCHAR, TIMESTAMP, TIMESTAMPTZ, DATE, TIME, TIMEETZ, 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, TIMEETZ, SUPER
- ZEITSTEMPEL
-
BPCHAR, TEXT, VARCHAR, TIMESTAMPTZ, DATUM, UHRZEIT
- ZEITSTEMPEL TZ
-
BOCHAR, TEXT, VARCHAR, ZEITSTEMPEL, DATUM, UHRZEIT, TIMETZ
- DATUM
-
BPCHAR, TEXT, VARCHAR, TIMESTAMP, TIMESTAMPTZ
- ZEIT
-
BPCHAR, TEXT, VARCHAR
- ZEITEN METZ
-
BOCHAR, 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
Das folgende Beispiel gibt Null zurück. Die Konvertierung einer ZEICHENFOLGE in eine GANZZAHL ist zulässig, sodass TRY_CAST keinen Fehler zurückgibt, aber 'foo' ist keine Ganzzahl, sodass die Funktion Null zurückgibt.
SELECT TRY_CAST('foo' AS INT)
Das folgende Beispiel gibt einen Fehler zurück, da die Konvertierung eines BOOLEAN in einen 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. Stellen Sie sich das folgende Beispiel vor, 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