Поиск

Функции приведения

  • CAST{выражение AS тип)
    CONVERT{выражение AS тип)
    CONVERT{выражение USING имя преобразователя)
    Функции CAST () и CONVERT() могут использоваться для получения значения дру­гого типа из значения заданного типа. Аргумент тип может принимать одно из следующих значений:
    1. BYNARY
    2. CHAR
    3. DATE
    4. DATETIME
    5. SIGNED [INTEGER]
    6. TIME
    7. 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.