В 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