MariaDB
 sql >> Datenbank >  >> RDS >> MariaDB

Wie CAST() in MariaDB funktioniert

In MariaDB CAST() ist eine eingebaute Funktion, die einen Wert in einen anderen Datentyp konvertiert. Es nimmt einen Wert eines Typs und gibt einen Wert des angegebenen Typs zurück.

Sie geben den Wert als Argument an, wenn Sie die Funktion aufrufen, sowie den Typ, in den Sie ihn konvertieren möchten.

CAST() funktioniert ähnlich wie CONVERT() .

Syntax

Die Syntax lautet wie folgt:

CAST(expr AS type)

Wobei expr ist der zu konvertierende Wert und type ist der Datentyp, in den Sie konvertieren möchten.

Beispiel

Hier ist ein einfaches Beispiel:

SELECT CAST(123.45 AS INT);

Ergebnis:

+---------------------+
| CAST(123.45 AS INT) |
+---------------------+
|                 123 |
+---------------------+

Dadurch wurde der Wert in eine Ganzzahl umgewandelt, und daher wurden die Dezimalstellen entfernt.

Hier ist ein weiteres Beispiel:

SELECT CAST('2020-01-01' AS DATETIME);

Ergebnis:

+--------------------------------+
| CAST('2020-01-01' AS DATETIME) |
+--------------------------------+
| 2020-01-01 00:00:00            |
+--------------------------------+

In diesem Fall haben wir einen String in einen DATETIME konvertiert Datentyp.

Konvertierungsfehler

Im vorherigen Beispiel haben wir ein gültiges DATE angegeben Zeichenfolge (oder DATE wörtlich). Daher konnte MariaDB den Wert in ein DATETIME umwandeln Datentyp.

Folgendes passiert jedoch, wenn wir ein ungültiges DATE angeben Zeichenkette:

SELECT CAST('1 Jan, 2020' AS DATE);

Ergebnis:

+-----------------------------+
| CAST('1 Jan, 2020' AS DATE) |
+-----------------------------+
| NULL                        |
+-----------------------------+

Hier konnte MariaDB anscheinend nicht herausfinden, wie man diesen Wert umwandelt und gab NULL zurück .

In diesem Fall könnten wir eine andere Funktion wie STR_TO_DATE() verwenden um eine solche Konvertierung durchzuführen:

SELECT STR_TO_DATE('1 Jan, 2020', '%e %M, %Y');

Ergebnis:

+-----------------------------------------+
| STR_TO_DATE('1 Jan, 2020', '%e %M, %Y') |
+-----------------------------------------+
| 2020-01-01                              |
+-----------------------------------------+

Geben Sie einen Zeichensatz an

Es ist möglich, einen Zeichensatz anzugeben, der für den Rückgabewert verwendet werden soll, wenn CAST() verwendet wird Funktion.

Beispiel:

SELECT 
    COLLATION(123) AS "123",
    COLLATION(CAST(123 AS CHAR CHARACTER SET utf16)) AS "utf16",
    COLLATION(CAST(123 AS CHAR CHARACTER SET latin1)) AS "latin1",
    COLLATION(CAST(123 AS CHAR CHARACTER SET big5)) AS "big5";

Ergebnis:

+--------+------------------+-------------------+-----------------+
| 123    | utf16            | latin1            | big5            |
+--------+------------------+-------------------+-----------------+
| binary | utf16_general_ci | latin1_swedish_ci | big5_chinese_ci |
+--------+------------------+-------------------+-----------------+

Hier haben wir die COLLATION() verwendet -Funktion, um die Sortierung jedes Werts zurückzugeben, nachdem er in den neuen Datentyp umgewandelt wurde. Jeder Wert verwendet die Standardsortierung für den angegebenen Zeichensatz.

Der Anfangswert ist kein String, also COLLATION() gibt binär zurück.

Umwandlung in CHAR ohne Angabe des Zeichensatzes führt zu collation_connection verwendete Zeichensatzsortierung.

Geben Sie eine Sortierung an

Es ist auch möglich, eine Sortierung anzugeben.

Beispiel:

SELECT 
    COLLATION(123) AS "123",
    COLLATION(CAST(123 AS CHAR CHARACTER SET utf16) COLLATE utf16_icelandic_ci) AS "utf16",
    COLLATION(CAST(123 AS CHAR CHARACTER SET latin1) COLLATE latin1_german2_ci) AS "latin1",
    COLLATION(CAST(123 AS CHAR CHARACTER SET big5) COLLATE big5_chinese_nopad_ci) AS "big5";

Ergebnis:

+--------+--------------------+-------------------+-----------------------+
| 123    | utf16              | latin1            | big5                  |
+--------+--------------------+-------------------+-----------------------+
| binary | utf16_icelandic_ci | latin1_german2_ci | big5_chinese_nopad_ci |
+--------+--------------------+-------------------+-----------------------+

In diesem Fall haben wir ausdrücklich eine zu verwendende Sortierung angegeben, die nicht die Standardsortierung für den angegebenen Zeichensatz ist (obwohl sie immer noch eine gültige Sortierung für den Zeichensatz ist).

Die Angabe einer Sortierung, die für den Zeichensatz nicht gültig ist, führt zu einem Fehler.

Folgendes passiert, wenn ich die ersten beiden Sortierungen vertausche:

SELECT 
    COLLATION(123) AS "123",
    COLLATION(CAST(123 AS CHAR CHARACTER SET utf16) COLLATE latin1_german2_ci) AS "utf16",
    COLLATION(CAST(123 AS CHAR CHARACTER SET latin1) COLLATE utf16_icelandic_ci) AS "latin1",
    COLLATION(CAST(123 AS CHAR CHARACTER SET big5) COLLATE big5_chinese_nopad_ci) AS "big5";

Ergebnis:

ERROR 1253 (42000): COLLATION 'latin1_german2_ci' is not valid for CHARACTER SET 'utf16'

Es kam zum ersten und warf einen Fehler, weil latin1_german2_ci ist keine gültige Sortierung für utf16 Zeichensatz.

Sehen Sie sich diese Liste der in MariaDB verfügbaren Sortierungen an, um eine vollständige Liste der Sortierungen und ihrer übereinstimmenden Zeichensätze zu erhalten.

Null-Argumente

Versuch, null zu konvertieren gibt null zurück :

SELECT CAST(null AS DATETIME);

Ergebnis:

+------------------------+
| CAST(null AS DATETIME) |
+------------------------+
| NULL                   |
+------------------------+

Allerdings wird null übergeben ohne Angabe des neuen Datentyps führt zu einem Fehler:

SELECT CAST(null);

Ergebnis:

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ')' at line 1

Fehlendes Argument

Aufruf von CAST() ohne Übergabe eines Arguments führt zu einem Fehler:

SELECT CAST();

Ergebnis:

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ')' at line 1