- CAST{выражение AS тип)
CONVERT{выражение AS тип)
CONVERT{выражение USING имя преобразователя)
Функции CAST () и CONVERT() могут использоваться для получения значения другого типа из значения заданного типа. Аргумент тип может принимать одно из следующих значений: - BYNARY
- CHAR
- DATE
- DATETIME
- SIGNED [INTEGER]
- TIME
- UNSIGNED [INTEGER]
CAST () и CONVERT () доступны, начиная с MySQL 4.0.2. Преобразование типа CHAR доступно, начиная с версии 4.0.6. Форма с USING функции CONVERT () доступна, начиная с версии 4.1.0.
CAST() и CONVERT(… USING …) имеют стандартный синтаксис SQL. Форма CONVERT () без USING – это синтаксис ODBC.
CONVERT() с USING применяется для преобразования данных между различными наборами символов. В MySQL имена преобразователей совпадают с именами соответствующих наборов символов. Например, приведенный ниже оператор преобразует строку ‘ abc’, представленную в серверном наборе символов по умолчанию, в набор символов utf 8: SELECT CONVERT(‘abcf USING utf8);
Функции приведения удобны, если необходимо создать столбец специфического типа в операторе CREATE.. .SELECT:
CREATE TABLE new table SELECT CAST(‘2000-01-01’ AS DATE);
Эти функции также можно использовать для сортировки столбцов типа ENUM в лексикографическом порядке. Обычно сортировка таких столбцов происходит в соответствии с их внутренними числовыми значениями. Приведение к типу CHAR позволяет выполнить лексическую сортировку:
SELECT столбец_епит FROM имя_таблицы ORDER BY CAST {столбец_епит AS CHAR) ;
CAST {строка AS BINARY) – ЭТО то же самое, что BINARY строка. CAST {выражение AS CHAR) трактует выражение как строку в наборе символов по умолчанию.
На заметку! В MySQL 4.0 применение функции CAST() к столбцу DATE, DATETIME или TIME только помечает столбец как относящийся к определенному типу, но не меняет его значения.
Начиная с MySQL 4.1.0, значение конвертируется в правильный тип столбца, когда отправляется пользователю (это свойство нового протокола 4.1, который отправляет информацию о дате клиенту):
mysql> SELECT CAST(NOW() AS DATE); -> 2003-05-26
Начиная с MySQL 4.1.1, cast () также изменяет результат, если вы используете ее как часть более сложного выражения, такого как CONCAT (‘Date: ‘,CAST(NOW() AS DATE)).
He следует использовать CAST() для извлечения данных в различных форматах, а лучше применять для этого функции LEFT () или EXTRACT(). См. раздел Функции даты и времени.
Чтобы привести строку к числовому значению, как правило, не нужно делать ничего. Просто используйте строковое значение так, как будто бы оно числовое:
mysql> SELECT l+’l1; -> 2
Если использовать число в строковом контексте, оно автоматически преобразуется в бинарную строку:
mysql> SELECT CONCAT(‘hello you ); -> ‘hello you 2’
MySQL поддерживает арифметику 64-разрядных значений со знаком и без. Если вы используете числовые операции (такие как +), и один из операндов является беззнаковым целым, результат будет беззнаковым. Это можно изменить, если применять операции приведения SIGNED или UNSIGNED, чтобы соответственно привести операцию к знаковому или беззнаковому 64-разрядному целому.
mysql> SELECT CAST (1-2 AS UNSIGNED)
-> 18446744073709551615 mysql> SELECT CAST(CAST(1-2 AS UNSIGNED) AS SIGNED);
-> -1
Следует отметить, что если оба операнда являются значениями с плавающей точкой, результатом будет значение с плавающей точкой, и это не затрагивает предыдущего правила. (В этом контексте значения столбцов DECIMAL трактуются как значения с плавающей точкой.)
mysql> SELECT CAST(1 AS UNSIGNED) – 2.0;
-> -1.0
Если вы используете строку в арифметической операции, она конвертируется в число с плавающей точкой.
Работа с беззнаковыми величинами изменилась в MySQL 4.0 таким образом, чтобы правильно поддерживать значения BIGINT. Если у вас есть какой-то код, который нужно выполнять и в MySQL 4.0, и в MySQL 3.23, вероятно, вы не сможете использовать функцию CAST (). Вы можете применить следующую технику, чтобы получить результат со знаком при вычитании двух беззнаковых целых столбцов ucoll и исо12:
mysql> SELECT (ucoll+0.0)- (ucol2+0.0) FROM …;
Идея заключается в том, чтобы преобразовать операнды в значения с плавающей точкой перед выполнением вычитания.
Если при переносе старых приложений MySQL в MySQL 4.0 возникают проблемы, можно указать опцию -sql-mode=NO_UNSIGNED_SUBSTRACTION при запуске mysqld. Однако, в таком случае вы не сможете эффективно использовать тип столбцов BIGINT UNSIGNED.