6.3.5 Функции приведения типов
Функция CAST
имеет следующий синтаксис:
CAST(expression AS type)
или
CONVERT(expression,type)
где аргумент type
представляет один из типов:
-
BINARY
-
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
.
Для преобразования строки в числовую величину обычно не нужно ничего
делать: просто используйте строку так, как будто это число:
mysql> SELECT 1+'1';
-> 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
.