Функция CAST имеет
следующий синтаксис:
CAST(expression AS type)
или
CONVERT(expression,type)
где аргумент type
представляет один из типов:
BINARY
CHAR (Новшество в 4.0.6)
DATE
DATETIME
SIGNED {INTEGER}
TIME
UNSIGNED {INTEGER}
Функция CAST()
соответствует синтаксису ANSI SQL99, а
функция CONVERT() -
синтаксису ODBC.
Данная функция приведения типов
используется главным образом для
создания столбца конкретного типа
с помощью команды CREATE ...
SELECT:
CREATE TABLE new_table SELECT CAST('2000-01-01' AS DATE);
Выражение CAST string AS BINARY
эквивалентно BINARY string.
CAST(expr AS CHAR считает что
данное выражение есть строка в
кодировке по умолчанию.
Для преобразования строки в числовую величину обычно не нужно ничего делать: просто используйте строку так, как будто это число:
mysql> SELECT 1+'1';
-> 2
Если вы указываете номер в
строковом контексте, номер будет
автоматически преобразован к
строке типа BINARY.
mysql> SELECT concat("hello you ",2);
-> "hello you 2"
MySQL поддерживает арифметические
операции с 64-битовыми величинами -
как со знаковыми, так и с
беззнаковыми. Если используются
числовые операции (такие как +) и
один из операндов представлен в
виде unsigned integer, то
результат будет беззнаковым. Его
можно переопределить, используя
операторы приведения
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
Если в арифметической операции используется строка, то результат преобразуется в число с плавающей точкой.
Функции CAST() и
CONVERT() были добавлены в
MySQL 4.0.2.
В MySQL 4.0 была изменены правила
обработки беззнаковых величин,
чтобы обеспечить более полную
поддержку величин типа
BIGINT. Если код необходимо
использовать и для MySQL 4.0, и для
версии 3.23 (в которой функция
CAST, скорее всего, не
будет работать), то можно, применив
следующий трюк, получить при
вычитании двух беззнаковых
целочисленных столбцов результат
со знаком:
SELECT (unsigned_column_1+0.0)-(unsigned_column_2+0.0);
Идея состоит в том, что перед выполнением вычитания данные столбцы приводятся к типу с плавающей точкой.
Если возникнут проблемы со
столбцами типа UNSIGNED в
старых приложениях MySQL при
переносе их на MySQL 4.0, можно
использовать параметр
--sql-mode=NO_UNSIGNED_SUBTRACTION при
запуске mysqld. Однако
следует учитывать, что при этом
теряется возможность эффективного
использования столбцов типа
UNSIGNED BIGINT.
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.
© 1995-2005 MySQL AB. All rights reserved.
