V MariaDB CONVERT()
je vestavěná funkce, která převádí hodnotu na jiný datový typ. Převezme hodnotu jednoho typu a vrátí hodnotu zadaného typu.
Hodnotu zadáte jako argument při volání funkce a také typ, na který ji chcete převést.
CONVERT()
je podobný CAST()
.
Syntaxe
CONVERT()
funkci lze volat pomocí syntaxe ODBC nebo syntaxe SQL92.
Syntaxe ODBC:
CONVERT(expr, type)
Syntaxe SQL92:
CONVERT(expr USING charset)
Kde expr
je hodnota, která se má převést, type
je datový typ, na který jej chcete převést.
Pomocí syntaxe SQL92 charset
je znaková sada, na kterou ji chcete převést.
Příklad
Zde je jednoduchý příklad:
SELECT CONVERT(123.45, INT);
Výsledek:
+----------------------+| CONVERT(123,45, INT) |+----------------------+| 123 |+----------------------+
Tím byla hodnota převedena na celé číslo, čímž byla odstraněna desetinná místa.
Zde je další příklad:
SELECT CONVERT('2020-01-01', DATETIME);
Výsledek:
+---------------------------------+| CONVERT('2020-01-01', DATETIME) |+---------------------------------+| 2020-01-01 00:00:00 |+---------------------------------+
V tomto případě jsme převedli řetězec na DATETIME
datový typ.
Selhání konverze
V předchozím příkladu jsme poskytli platné DATE
řetězec (nebo DATE
doslovný). MariaDB tedy dokázala převést hodnotu na DATETIME
datový typ.
Co se však stane, když poskytneme neplatné DATE
řetězec:
SELECT CONVERT('1 Jan, 2020', DATE);
Výsledek:
+------------------------------+| CONVERT('1. ledna 2020', DATUM) |+------------------------------+| NULL |+------------------------------+
Zde MariaDB nedokázala zjistit, jak tuto hodnotu převést, a vrátila NULL
.
V tomto případě bychom mohli použít jinou funkci, například STR_TO_DATE()
k provedení takové konverze:
SELECT STR_TO_DATE('1 Jan, 2020', '%e %M, %Y');
Výsledek:
+-----------------------------------------+| STR_TO_DATE('1. ledna 2020', '%e %M, %Y') |+------------------------------ ------------+| 2020-01-01 |+-----------------------------------------+Určení znakové sady
Syntaxe SQL92 nám umožňuje zadat znakovou sadu, na kterou se má převést.
Příklad:
SELECT CONVERT('ไม้เมือง' USING tis620);
Výsledek:
+---------------------------------------------- ----+| CONVERT('ไม้เมือง' POMOCÍ tis620) |+---------------------------------------- -----------+| ไม้เมือง |+----------------------------------------------- ----+Změnou znakové sady se také změní řazení na výchozí řazení pro danou znakovou sadu.
Výše uvedený příklad ve skutečnosti nedemonstruje, jak se znaková sada/kompletace změnila.
Naštěstí můžeme použít funkce jako
CHARSET()
aCOLLATION()
abyste viděli, jak se změnila znaková sada a řazení:SELECT CHARSET('ไม้เมือง') AS a, COLLATION('ไม้เมือง') AS b, CHARSET(CONVERT('ไม้เมือง' USING tis620)) AS c, COLLATION(CONVERT('ไม้เมือง' USING tis620)) AS d;
Výsledek:
+------+-----------------+--------+------------- ----+| a | b | c | d |+------+-----------------+--------+-------------- ---+| utf8 | utf8_general_ci | tis620 | tis620_thai_ci |+------+-----------------+---------+------------- ---+
První používá znakovou sadu a řazení pro mé připojení. Druhý používá znakovou sadu, kterou jsme výslovně specifikovali pomocí CONVERT()
, stejně jako výchozí řazení pro danou znakovou sadu.
Podívejte se na tento seznam porovnávání dostupných v MariaDB, kde najdete úplný seznam porovnávání a jejich odpovídající znakové sady.
Nulové argumenty
Pokus o převod null
vrátí null
:
SELECT CONVERT(null, DATETIME);
Výsledek:
+-------------------------+| CONVERT(null, DATETIME) |+-------------------------+| NULL |+-------------------------+
Nicméně předání null
bez zadání nového datového typu dojde k chybě syntaxe:
SELECT CONVERT(null);
Výsledek:
ERROR 1064 (42000):Máte chybu v syntaxi SQL; podívejte se do manuálu, který odpovídá verzi vašeho serveru MariaDB, kde najdete správnou syntaxi blízko ')' na řádku 1
Chybí argument
Volání CONVERT()
bez předání argumentu dojde k chybě syntaxe:
SELECT CONVERT();
Výsledek:
ERROR 1064 (42000):Máte chybu v syntaxi SQL; podívejte se do manuálu, který odpovídá verzi vašeho serveru MariaDB, kde najdete správnou syntaxi blízko ')' na řádku 1