MariaDB
 sql >> база данни >  >> RDS >> MariaDB

Как CAST() работи в MariaDB

В 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

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да защитите вашата MySQL или MariaDB база данни от SQL инжекция:Част втора

  2. MariaDB POWER() Обяснено

  3. Планиране на капацитет за MySQL и MariaDB – Оразмеряване на размера на съхранение

  4. Как ATAN() работи в MariaDB

  5. ClusterControl - Разширено управление на архивиране - mariabackup част III