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 | +-------------+
См. также
© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/cast/