В MariaDB, CONVERT() е вградена функция, която преобразува стойност в друг тип данни. Приема стойност от един тип и връща стойност от посочения тип.
Вие предоставяте стойността като аргумент, когато извиквате функцията, както и типа, в който искате да се преобразува.
CONVERT() е подобен на CAST() .
Синтаксис
CONVERT() функцията може да бъде извикана с помощта на ODBC синтаксис или SQL92 синтаксис.
Синтаксис на ODBC:
CONVERT(expr, type) Синтаксис на SQL92:
CONVERT(expr USING charset)
Където expr е стойността за преобразуване, type е типът данни, към който искате да се преобразува.
Използвайки синтаксиса на SQL92, charset е наборът от знаци, в който искате да бъде преобразуван.
Пример
Ето един прост пример:
SELECT CONVERT(123.45, INT); Резултат:
+---------------------+| CONVERT(123.45, INT) |+---------------------+| 123 |+----------------------+
Това преобразува стойността в цяло число, което премахва десетичните знаци.
Ето още един пример:
SELECT CONVERT('2020-01-01', DATETIME); Резултат:
+--------------------------------+| CONVERT('2020-01-01', DATETIME) |+--------------------------------+| 2020-01-01 00:00:00 |+--------------------------------+
В този случай преобразувахме низ в DATETIME тип данни.
Неуспешно преобразуване
В предишния пример предоставихме валидна DATE низ (или DATE буквално). Следователно MariaDB успя да преобразува стойността в DATETIME тип данни.
Ето какво се случва обаче, когато предоставим невалидна DATE низ:
SELECT CONVERT('1 Jan, 2020', DATE); Резултат:
+------------------------------+| CONVERT('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 |+-------------------------------------------------+предварително> Посочете набор от знаци
Синтаксисът на SQL92 ни позволява да посочим набор от знаци, в който да конвертираме.
Пример:
SELECT CONVERT('ไม้เมือง' USING tis620);
Резултат:
+------------------------------------------------------- ----+| CONVERT('ไม้เมือง' ИЗПОЛЗВАНЕ tis620) |+--------------------------------------- -----------+| ไม้เมือง |+---------------------------------------------- ----+
Промяната на набора от знаци също ще промени съпоставянето да бъде съпоставянето по подразбиране за този набор от знаци.
Горният пример всъщност не демонстрира как се е променил наборът от знаци/колекцията.
За щастие можем да използваме функции като CHARSET() и COLLATION() за да видите как са се променили наборът от знаци и сортирането:
SELECT
CHARSET('ไม้เมือง') AS a,
COLLATION('ไม้เมือง') AS b,
CHARSET(CONVERT('ไม้เมือง' USING tis620)) AS c,
COLLATION(CONVERT('ไม้เมือง' USING tis620)) AS d;
Резултат:
+------+----------------+--------+------------ ----+| а | б | в | г |+------+----------------+--------+------------ ---+| utf8 | utf8_general_ci | tis620 | tis620_thai_ci |+------+-----------------+--------+------------ ---+
Първият използва набора от знаци и сортиране за моята връзка. Вторият използва набора от знаци, който изрично посочихме с CONVERT() , както и съпоставянето по подразбиране за този набор от знаци.
Вижте този списък със съпоставяния, налични в MariaDB, за пълен списък на съпоставянията и съответстващите им набори от знаци.
Нулеви аргументи
Опитвам се да преобразувам null връща null :
SELECT CONVERT(null, DATETIME);
Резултат:
+------------------------+| CONVERT(null, DATETIME) |+-----------------------+| NULL |+------------------------+
Въпреки това, подаване на null без уточняване на новия тип данни води до синтактична грешка:
SELECT CONVERT(null);
Резултат:
ГРЕШКА 1064 (42000):Имате грешка във вашия SQL синтаксис; проверете ръководството, което съответства на вашата версия на сървъра на MariaDB за правилния синтаксис, който да използвате близо до ')' на ред 1
Липсващ аргумент
Извикване на CONVERT() без подаване на аргумент води до синтактична грешка:
SELECT CONVERT();
Резултат:
ГРЕШКА 1064 (42000):Имате грешка във вашия SQL синтаксис; проверете ръководството, което съответства на вашата версия на сървъра на MariaDB за правилния синтаксис, който да използвате близо до ')' на ред 1