I MariaDB, CONVERT()
är en inbyggd funktion som konverterar ett värde till en annan datatyp. Det tar ett värde av en typ och returnerar ett värde av den angivna typen.
Du anger värdet som ett argument när du anropar funktionen, samt den typ som du vill att den ska konverteras till.
CONVERT()
liknar CAST()
.
Syntax
CONVERT()
funktionen kan anropas med ODBC-syntax eller SQL92-syntax.
ODBC-syntax:
CONVERT(expr, type)
SQL92-syntax:
CONVERT(expr USING charset)
Där expr
är värdet som ska konverteras, type
är den datatyp som du vill att den ska konverteras till.
Använder SQL92-syntaxen, charset
är teckenuppsättningen du vill att den ska konverteras till.
Exempel
Här är ett enkelt exempel:
SELECT CONVERT(123.45, INT);
Resultat:
+----------------------+ | CONVERT(123.45, INT) | +----------------------+ | 123 | +----------------------+
Detta konverterade värdet till ett heltal, vilket tog bort decimalerna.
Här är ett annat exempel:
SELECT CONVERT('2020-01-01', DATETIME);
Resultat:
+---------------------------------+ | CONVERT('2020-01-01', DATETIME) | +---------------------------------+ | 2020-01-01 00:00:00 | +---------------------------------+
I det här fallet konverterade vi en sträng till en DATETIME
datatyp.
Konverteringsfel
I föregående exempel angav vi ett giltigt DATE
sträng (eller DATE
bokstavlig). Därför kunde MariaDB konvertera värdet till en DATETIME
datatyp.
Men här är vad som händer när vi tillhandahåller ett ogiltigt DATE
sträng:
SELECT CONVERT('1 Jan, 2020', DATE);
Resultat:
+------------------------------+ | CONVERT('1 Jan, 2020', DATE) | +------------------------------+ | NULL | +------------------------------+
Här kunde MariaDB inte ta reda på hur man konverterade detta värde och returnerade NULL
.
I det här fallet kan vi använda en annan funktion, till exempel STR_TO_DATE()
för att utföra en sådan konvertering:
SELECT STR_TO_DATE('1 Jan, 2020', '%e %M, %Y');
Resultat:
+-----------------------------------------+ | STR_TO_DATE('1 Jan, 2020', '%e %M, %Y') | +-----------------------------------------+ | 2020-01-01 | +-----------------------------------------+
Ange en teckenuppsättning
SQL92-syntaxen tillåter oss att ange en teckenuppsättning att konvertera till.
Exempel:
SELECT CONVERT('ไม้เมือง' USING tis620);
Resultat:
+--------------------------------------------------+ | CONVERT('ไม้เมือง' USING tis620) | +--------------------------------------------------+ | ไม้เมือง | +--------------------------------------------------+
Om du ändrar teckenuppsättningen ändras också sorteringen till att vara standardsorteringen för den teckenuppsättningen.
Exemplet ovan visar inte riktigt hur teckenuppsättningen/sorteringen har förändrats.
Lyckligtvis kan vi använda funktioner som CHARSET()
och COLLATION()
för att se hur teckenuppsättningen och sorteringen har ändrats:
SELECT
CHARSET('ไม้เมือง') AS a,
COLLATION('ไม้เมือง') AS b,
CHARSET(CONVERT('ไม้เมือง' USING tis620)) AS c,
COLLATION(CONVERT('ไม้เมือง' USING tis620)) AS d;
Resultat:
+------+-----------------+--------+----------------+ | a | b | c | d | +------+-----------------+--------+----------------+ | utf8 | utf8_general_ci | tis620 | tis620_thai_ci | +------+-----------------+--------+----------------+
Den första använder teckenuppsättningen och sorteringen för min anslutning. Den andra använder teckenuppsättningen som vi uttryckligen specificerade med CONVERT()
, samt standardsorteringen för den teckenuppsättningen.
Se den här listan över sorteringar som är tillgängliga i MariaDB för en fullständig lista över sammanställningar och deras matchande teckenuppsättningar.
Nollargument
Försöker konvertera null
returnerar null
:
SELECT CONVERT(null, DATETIME);
Resultat:
+-------------------------+ | CONVERT(null, DATETIME) | +-------------------------+ | NULL | +-------------------------+
Men skickar null
utan att ange den nya datatypen resulterar det i ett syntaxfel:
SELECT CONVERT(null);
Resultat:
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
Argument saknas
Anropar CONVERT()
utan att skicka ett argument resulterar det i ett syntaxfel:
SELECT CONVERT();
Resultat:
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