Premium

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.1
SELECT '50' > 49 AS comparison_1, '50' > 51 AS comparison_2;
comparison_1comparison_2
10
MySQL 8.1
SELECT '50' > 49 AS comparison_1, '50' > 51 AS comparison_2;
comparison_1comparison_2
truefalse

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.1
CAST(wert AS ziel_typ);
CONVERT(wert, ziel_typ);

Zum Beispiel,

MySQL 8.1
SELECT CAST(12005.6 AS DECIMAL) AS cast_example, CONVERT(12005.4, DECIMAL) AS convert_example;
cast_exampleconvert_example
1200612005
MySQL 8.1
CAST(wert AS ziel_typ);
wert::ziel_typ;

Zum Beispiel,

MySQL 8.1
SELECT CAST(12005.6 AS INTEGER) AS cast_example, 12005.4::INTEGER AS operator_example;
cast_exampleoperator_example
1200612005

Die Funktion CAST kann den übergebenen Wert in einen der folgenden Typen umwandeln:

TypBeschreibung
DATEKonvertiert den Wert in DATE. Format: "YYYY-MM-DD".
DATETIMEKonvertiert den Wert in DATETIME. Format: "YYYY-MM-DD hh:mm:ss".
TIMEKonvertiert den Wert in TIME. Format: "hh:mm:ss".
DECIMAL[(M[,D])]Konvertiert den Wert in DECIMAL. Hat zwei optionale Argumente M und D, die die maximale Anzahl der Stellen vor und nach dem Komma festlegen. Standardmäßig ist D gleich 0 und M gleich 10.
CHAR[(N)]Konvertiert den Wert in CHAR. Als optionales Argument kann die maximale Länge der Zeichenkette übergeben werden.
SIGNEDKonvertiert den Wert in einen BIGINT-Wert.
UNSIGNEDKonvertiert den Wert in einen vorzeichenlosen BIGINT-Wert.
BINARYKonvertiert den Wert in BINARY.
YEARKonvertiert den Wert in ein Jahr.

Die Funktion CAST kann den übergebenen Wert in einen der folgenden Typen umwandeln:

TypBeschreibung
DATEKonvertiert den Wert in DATE. Format: "YYYY-MM-DD".
TIMESTAMPKonvertiert den Wert in TIMESTAMP. Format: "YYYY-MM-DD hh:mm:ss".
TIMEKonvertiert den Wert in TIME. Format: "hh:mm:ss".
NUMERIC[(M[,D])]Konvertiert den Wert in NUMERIC. Hat zwei optionale Argumente M und D, die die maximale Anzahl der Stellen vor und nach dem Komma festlegen.
VARCHAR[(N)]Konvertiert den Wert in VARCHAR. Als optionales Argument kann die maximale Länge der Zeichenkette übergeben werden.
INTEGERKonvertiert den Wert in eine ganze Zahl.
BIGINTKonvertiert den Wert in eine große ganze Zahl.
BOOLEANKonvertiert den Wert in einen booleschen Typ.
TEXTKonvertiert den Wert in einen Texttyp.

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.1
SELECT CAST('SQL Academy' AS DATETIME) AS invalid_cast;
invalid_cast
<NULL>

In diesem Fall gibt MySQL NULL anstelle des konvertierten Werts zurück.

MySQL 8.1
SELECT 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?