Spec-Zone.ru › MariaDB

CAST

Синтаксис

CAST(expr AS type)

Описание

Функция CAST() принимает значение одного типа и возвращает значение другого типа, подобно функции CONVERT().

Тип может быть одним из следующих значений:

  • BINARY
  • CHAR
  • DATE
  • DATETIME
  • DECIMAL[(M[,D])]
  • DOUBLE
  • FLOAT (с MariaDB 10.4.5)
  • INTEGER
    • Сокращённо от SIGNED INTEGER
  • SIGNED [INTEGER]
  • UNSIGNED [INTEGER]
  • TIME
  • VARCHAR (в режиме Oracle, начиная с MariaDB 10.3)

Основное отличие между CAST и CONVERT() заключается в том, что CONVERT(expr,type) использует синтаксис ODBC, в то время как CAST(expr as type) и CONVERT(... USING ...) используют синтаксис SQL92.

В MariaDB 10.4 и более поздних версиях можно использовать функцию CAST() с ключевым словом INTERVAL.

До MariaDB 5.5.31, X'HHHH', стандартный SQL синтаксис для бинарных строковых литералов, ошибочно работал аналогично 0xHHHH. В 5.5.31 он был намеренно изменён для работы как строка во всех контекстах (и никогда как число).

Это ввело несовместимость с предыдущими версиями MariaDB и всеми версиями MySQL (см. пример ниже).

Примеры

Простые преобразования:

SELECT CAST("abc" AS BINARY);
SELECT CAST("1" AS UNSIGNED INTEGER);
SELECT CAST(123 AS CHAR CHARACTER SET utf8)

Обратите внимание, что при преобразовании в CHAR без указания набора символов, будет использован набор символов и кодировка collation_connection. При использовании с CHAR CHARACTER SET, будет использована кодировка по умолчанию для этого набора символов.

SELECT COLLATION(CAST(123 AS CHAR));
+------------------------------+
| COLLATION(CAST(123 AS CHAR)) |
+------------------------------+
| latin1_swedish_ci            |
+------------------------------+

SELECT COLLATION(CAST(123 AS CHAR CHARACTER SET utf8));
+-------------------------------------------------+
| COLLATION(CAST(123 AS CHAR CHARACTER SET utf8)) |
+-------------------------------------------------+
| utf8_general_ci                                 |
+-------------------------------------------------+

Если вам также нужно изменить кодировку, нужно использовать оператор COLLATE:

SELECT COLLATION(CAST(123 AS CHAR CHARACTER SET utf8) 
  COLLATE utf8_unicode_ci);
+-------------------------------------------------------------------------+
| COLLATION(CAST(123 AS CHAR CHARACTER SET utf8) COLLATE utf8_unicode_ci) |
+-------------------------------------------------------------------------+
| utf8_unicode_ci                                                         |
+-------------------------------------------------------------------------+

Использование CAST() для сортировки поля ENUM как CHAR вместо внутреннего числового значения:

CREATE TABLE enum_list (enum_field enum('c','a','b'));

INSERT INTO enum_list (enum_field) 
VALUES('c'),('a'),('c'),('b');

SELECT * FROM enum_list 
ORDER BY enum_field;
+------------+
| enum_field |
+------------+
| c          |
| c          |
| a          |
| b          |
+------------+

SELECT * FROM enum_list 
ORDER BY CAST(enum_field AS CHAR);
+------------+
| enum_field |
+------------+
| a          |
| b          |
| c          |
| c          |
+------------+

Начиная с MariaDB 5.5.31, следующее действие будет вызывать предупреждения, так как x'aa' и 'X'aa' больше не ведут себя как числа. Ранее, и во всех версиях MySQL, предупреждения не вызывались, так как они ошибочно вели себя как числа:

SELECT CAST(0xAA AS UNSIGNED), CAST(x'aa' AS UNSIGNED), CAST(X'aa' AS UNSIGNED);
+------------------------+-------------------------+-------------------------+
| CAST(0xAA AS UNSIGNED) | CAST(x'aa' AS UNSIGNED) | CAST(X'aa' AS UNSIGNED) |
+------------------------+-------------------------+-------------------------+
|                    170 |                       0 |                       0 |
+------------------------+-------------------------+-------------------------+
1 row in set, 2 warnings (0.00 sec)

Warning (Code 1292): Truncated incorrect INTEGER value: '\xAA'
Warning (Code 1292): Truncated incorrect INTEGER value: '\xAA'

Преобразование в интервалы:

SELECT CAST(2019-01-04 INTERVAL AS DAY_SECOND(2)) AS "Cast";

+-------------+
| Cast        |
+-------------+
| 00:20:17.00 |
+-------------+

См. также

  • Поддерживаемые типы данных
  • Микросекунды в MariaDB
  • Строковые литералы
  • COLLATION()
  • CONVERT()
Содержимое, воспроизведенное на этом сайте, является собственностью соответствующих владельцев, и это содержимое не проверяется предварительно компанией MariaDB. Мнения, информация и мнения, выраженные в этом содержимом, не обязательно отражают точку зрения MariaDB или любой другой стороны.

© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/cast/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API