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

Wie CONVERT() in MariaDB funktioniert

In MariaDB CONVERT() ist eine eingebaute Funktion, die einen Wert in einen anderen Datentyp konvertiert. Es nimmt einen Wert eines Typs an 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.

CONVERT() ist ähnlich wie CAST() .

Syntax

Das CONVERT() Funktion kann mit ODBC-Syntax oder SQL92-Syntax aufgerufen werden.

ODBC-Syntax:

CONVERT(expr, type) 

SQL92-Syntax:

CONVERT(expr USING charset) 

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

Unter Verwendung der SQL92-Syntax charset ist der Zeichensatz, in den Sie ihn konvertieren möchten.

Beispiel

Hier ist ein einfaches Beispiel:

SELECT CONVERT(123.45, INT); 

Ergebnis:

+----------------------+| CONVERT(123.45, INT) |+----------------------+| 123 |+----------------------+

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

Hier ist ein weiteres Beispiel:

SELECT CONVERT('2020-01-01', DATETIME); 

Ergebnis:

+---------------------------------+| CONVERT('2020-01-01', DATETIME) |+----------------------------------------------+| 01.01.2020 00:00:00 |+---------------------------------------------+

In diesem Fall haben wir einen String in einen DATETIME umgewandelt 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 CONVERT('1 Jan, 2020', DATE); 

Ergebnis:

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

Hier konnte MariaDB nicht herausfinden, wie dieser Wert konvertiert werden sollte, 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') |+------------------------ -------------+| 01.01.2020 |+------------------------------------+

Geben Sie einen Zeichensatz an

Die SQL92-Syntax ermöglicht es uns, einen Zeichensatz anzugeben, in den konvertiert werden soll.

Beispiel:

SELECT CONVERT('ไม้เมือง' USING tis620); 

Ergebnis:

+---------------------------------------------- ----+| CONVERT('ไม้เมือง' USING tis620) |+-------------------------------------- -----------+| ไม้เมือง |+---------------------------------------------- ----+

Durch das Ändern des Zeichensatzes wird auch die Sortierung in die Standardsortierung für diesen Zeichensatz geändert.

Das obige Beispiel zeigt nicht wirklich, wie sich der Zeichensatz/die Sortierung geändert hat.

Glücklicherweise können wir Funktionen wie CHARSET() verwenden und COLLATION() um zu sehen, wie sich der Zeichensatz und die Sortierung geändert haben:

 SELECT 
    CHARSET('ไม้เมือง') AS a,
    COLLATION('ไม้เมือง') AS b,
    CHARSET(CONVERT('ไม้เมือง' USING tis620)) AS c,
    COLLATION(CONVERT('ไม้เมือง' USING tis620)) AS d; 

Ergebnis:

+------+----------------+--------+------------ ----+| ein | b | c | d |+------+----------------+--------+------------- ---+| utf8 | utf8_general_ci | tis620 | tis620_thai_ci |+------+-----------------+--------+------------- ---+

Der erste verwendet den Zeichensatz und die Sortierung für meine Verbindung. Der zweite verwendet den Zeichensatz, den wir explizit mit CONVERT() angegeben haben , sowie die Standardsortierung für diesen 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 CONVERT(null, DATETIME); 

Ergebnis:

+-------------------------+| CONVERT(null, DATETIME) |+-------------------------+| NULL |+-------------------------+

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

SELECT CONVERT(null); 

Ergebnis:

ERROR 1064 (42000):Sie haben einen Fehler in Ihrer SQL-Syntax; Überprüfen Sie das Handbuch, das Ihrer MariaDB-Serverversion entspricht, auf die richtige Syntax, um sie in der Nähe von ')' in Zeile 1 zu verwenden

Fehlendes Argument

Aufruf von CONVERT() ohne Übergabe eines Arguments führt zu einem Syntaxfehler:

SELECT CONVERT(); 

Ergebnis:

ERROR 1064 (42000):Sie haben einen Fehler in Ihrer SQL-Syntax; Überprüfen Sie das Handbuch, das Ihrer MariaDB-Serverversion entspricht, auf die richtige Syntax, um sie in der Nähe von ')' in Zeile 1 zu verwenden