V MariaDB, CAST()
je vestavěná funkce, která převádí hodnotu na jiný datový typ. Přebírá hodnotu jednoho typu a vrací hodnotu zadaného typu.
Hodnotu zadáte jako argument při volání funkce a také typ, na který ji chcete převést.
CAST()
funguje podobně jako CONVERT()
.
Syntaxe
Syntaxe vypadá takto:
CAST(expr AS type)
Kde expr
je hodnota, která se má převést, a type
je datový typ, na který jej chcete převést.
Příklad
Zde je jednoduchý příklad:
SELECT CAST(123.45 AS INT);
Výsledek:
+---------------------+| CAST(123,45 AS INT) |+---------------------+| 123 |+---------------------+
Toto přetypovalo hodnotu na celé číslo, a proto byla odstraněna desetinná místa.
Zde je další příklad:
SELECT CAST('2020-01-01' AS DATETIME);
Výsledek:
+--------------------------------+| CAST('2020-01-01' AS 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 CAST('1 Jan, 2020' AS DATE);
Výsledek:
+-----------------------------+| CAST('1. ledna 2020' JAKO DATUM) |+-----------------------------+| NULL |+-----------------------------+
Zde MariaDB zjevně 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
Při použití
CAST()
je možné určit znakovou sadu, která se má použít pro návratovou hodnotu funkce.Příklad:
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";
Výsledek:
+--------+------------------+------------------ -+------------------+| 123 | utf16 | latina1 | big5 |+--------+------------------+-------------------- +------------------+| binární | utf16_general_ci | latin1_swedish_ci | big5_chinese_ci |+--------+------------------+-------------------- +-----------------+Zde jsme použili
COLLATION()
funkce, která vrátí řazení každé hodnoty poté, co byla přetypována na nový datový typ. Každá hodnota používá výchozí řazení pro zadanou znakovou sadu.Počáteční hodnota není řetězec, a proto
COLLATION()
vrátí binární.Převádí se na
CHAR
bez zadání znakové sady bude výsledkemcollation_connection
se používá řazení znakové sady.Zadejte řazení
Je také možné určit řazení.
Příklad:
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";
Výsledek:
+--------+--------------------+---------------- ---+------------------------+| 123 | utf16 | latina1 | big5 |+--------+--------------------+------------------ --+------------------------+| binární | utf16_icelandic_ci | latin1_german2_ci | big5_chinese_nopad_ci |+--------+--------------------+----------------- --+-----------------------+V tomto případě jsme explicitně určili řazení, které se má použít, které není výchozím řazením pro zadanou znakovou sadu (ačkoli je to stále platné řazení pro znakovou sadu).
Zadáním řazení, které není platné pro znakovou sadu, dojde k chybě.
Zde je to, co se stane, když změním první dvě kolace:
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";
Výsledek:
CHYBA 1253 (42000):COLLATION 'latin1_german2_ci' není platný pro CHARACTER SET 'utf16'Dostalo se to na první a vyhodilo chybu, protože
latin1_german2_ci
není platné řazení proutf16
znaková sada.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 CAST(null AS DATETIME);
Výsledek:
+------------------------+| CAST(null AS DATETIME) |+------------------------+| NULL |+------------------------+Nicméně předání
null
bez zadání nového datového typu dojde k chybě:SELECT CAST(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 1Chybí argument
Volání
CAST()
bez předání argumentu dojde k chybě:SELECT CAST();
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