В MariaDB, CAST() е вградена функция, която преобразува стойност в друг тип данни. Приема стойност от един тип и връща стойност от посочения тип.
Вие предоставяте стойността като аргумент, когато извиквате функцията, както и типа, в който искате да се преобразува.
CAST() работи подобно на CONVERT() .
Синтаксис
Синтаксисът е така:
CAST(expr AS type)
Където expr е стойността за преобразуване и type е типът данни, към който искате да се преобразува.
Пример
Ето един прост пример:
SELECT CAST(123.45 AS INT); Резултат:
+---------------------+| CAST(123.45 КАТО INT) |+---------------------+| 123 |+---------------------+
Това прехвърля стойността на цяло число и следователно десетичните знаци бяха премахнати.
Ето още един пример:
SELECT CAST('2020-01-01' AS DATETIME); Резултат:
+--------------------------------+| CAST('2020-01-01' КАТО ДАТА ВРЕМЕ) |+--------------------------------+| 2020-01-01 00:00:00 |+--------------------------------+
В този случай преобразувахме низ в DATETIME тип данни.
Неуспешно преобразуване
В предишния пример предоставихме валидна DATE низ (или DATE буквално). Следователно MariaDB успя да преобразува стойността в DATETIME тип данни.
Ето какво се случва обаче, когато предоставим невалидна DATE низ:
SELECT CAST('1 Jan, 2020' AS DATE); Резултат:
+----------------------------+| CAST('1 януари 2020' КАТО ДАТА) |+----------------------------+| NULL |+-----------------------------+
Тук MariaDB очевидно не можа да разбере как да преобразува тази стойност и върна NULL .
В този случай бихме могли да използваме друга функция, като STR_TO_DATE() за да извършите такова преобразуване:
SELECT STR_TO_DATE('1 Jan, 2020', '%e %M, %Y'); Резултат:
+-----------------------------------+| STR_TO_DATE('1 януари 2020 г.', '%e %M, %Y') |+---------------------------- ------------+| 2020-01-01 |+-------------------------------------------------+предварително> Посочете набор от знаци
Възможно е да посочите набор от знаци, който да се използва за връщаната стойност, когато използвате CAST() функция.
Пример:
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";
Резултат:
+--------+-----------------+------------------ -+----------------+| 123 | utf16 | latin1 | big5 |+--------+----------------+------------------- +----------------+| двоичен | utf16_general_ci | latin1_swedish_ci | big5_chinese_ci |+--------+-----------------+------------------- +----------------+
Тук използвахме COLLATION() функция за връщане на съпоставянето на всяка стойност, след като е била прехвърлена към новия тип данни. Всяка стойност използва съпоставянето по подразбиране за посочения набор от знаци.
Първоначалната стойност не е низ и така COLLATION() връща двоичен.
Преобразува се в CHAR без уточняване на набора от знаци ще доведе до collation_connection се използва съпоставяне на набор от символи.
Посочете колекция
Възможно е също да посочите съпоставяне.
Пример:
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";
Резултат:
+--------+--------------------+---------------- ---+-----------------------+| 123 | utf16 | latin1 | big5 |+--------+-------------------+---------------- --+-----------------------+| двоичен | utf16_icelandic_ci | latin1_german2_ci | big5_chinese_nopad_ci |+--------+-------------------+---------------- --+-----------------------+
В този случай ние изрично посочихме съпоставяне, което да използваме, което не е съпоставянето по подразбиране за посочения набор от знаци (въпреки че все още е валидно съпоставяне за набора от знаци).
Посочването на съпоставяне, което не е валидно за набора от знаци, води до грешка.
Ето какво се случва, когато сменя първите две съпоставяния:
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";
Резултат:
ГРЕШКА 1253 (42000):COLLATION 'latin1_german2_ci' не е валидна за НАБОР ОТ СИМВОЛИ 'utf16'
Стигна до първия и издаде грешка, защото latin1_german2_ci не е валидно съпоставяне за utf16 набор от символи.
Вижте този списък със съпоставяния, налични в MariaDB, за пълен списък на съпоставянията и съответстващите им набори от знаци.
Нулеви аргументи
Опитвам се да преобразувам null връща null :
SELECT CAST(null AS DATETIME);
Резултат:
+-----------------------+| CAST(нула КАТО DATETIME) |+-----------------------+| NULL |+------------------------+
Въпреки това, подаване на null без уточняване на новия тип данни води до грешка:
SELECT CAST(null);
Резултат:
ГРЕШКА 1064 (42000):Имате грешка във вашия SQL синтаксис; проверете ръководството, което съответства на вашата версия на сървъра на MariaDB за правилния синтаксис, който да използвате близо до ')' на ред 1
Липсващ аргумент
Извикване на CAST() без подаване на аргумент води до грешка:
SELECT CAST();
Резултат:
ГРЕШКА 1064 (42000):Имате грешка във вашия SQL синтаксис; проверете ръководството, което съответства на вашата версия на сървъра на MariaDB за правилния синтаксис, който да използвате близо до ')' на ред 1