Funktionen zur Typkonvertierung, CAST
Wenn wir Operationen mit Werten unterschiedlicher Datentypen ausführen, versucht das DBMS, eine Konvertierung durchzuführen und die verwendeten Werte in den passenden Typ zu überführen. Im Beispiel unten vergleichen wir zum Beispiel Werte mit den Typen STRING und INT. Um diesen Vergleich auszuführen, konvertiert das DBMS automatisch den Zeichenkettenwert in einen numerischen.
MySQL 8.1SELECT '50' > 49 AS comparison_1, '50' > 51 AS comparison_2;
MySQL 8.1SELECT '50' > 49 AS comparison_1, '50' > 51 AS comparison_2;
Aber nicht alle Konvertierungen kann das DBMS automatisch vornehmen, dann ist eine explizite Typkonvertierung nötig.
Dafür gibt es in MySQL zwei sehr ähnliche Funktionen: CAST und CONVERT.
Dafür gibt es in PostgreSQL die Funktion CAST und den Operator ::.
Syntax
MySQL 8.1CAST(wert AS ziel_typ); CONVERT(wert, ziel_typ);
Zum Beispiel,
MySQL 8.1SELECT CAST(12005.6 AS DECIMAL) AS cast_example, CONVERT(12005.4, DECIMAL) AS convert_example;
MySQL 8.1CAST(wert AS ziel_typ); wert::ziel_typ;
Zum Beispiel,
MySQL 8.1SELECT CAST(12005.6 AS INTEGER) AS cast_example, 12005.4::INTEGER AS operator_example;
Die Funktion CAST kann den übergebenen Wert in einen der folgenden Typen umwandeln:
Die Funktion CAST kann den übergebenen Wert in einen der folgenden Typen umwandeln:
Wenn eine Konvertierung nicht möglich ist
Die Verwendung der Funktion CAST stellt Anforderungen an das Format des Ausgangswerts. Und sofort drängt sich die Frage auf, was passiert, wenn dieses Format nicht zum erforderlichen passt? Was ist zum Beispiel, wenn man versucht, einen beliebigen Text in einen Zeit-Datentyp zu konvertieren:
MySQL 8.1SELECT CAST('SQL Academy' AS DATETIME) AS invalid_cast;
In diesem Fall gibt MySQL NULL anstelle des konvertierten Werts zurück.
MySQL 8.1SELECT CAST('SQL Academy' AS TIMESTAMP) AS invalid_cast;
In diesem Fall gibt PostgreSQL einen Fehler zurück, da die Zeichenkette nicht in ein Datum konvertiert werden kann.
Selbsttest
Also, wofür ist die Funktion CAST in SQL zuständig?