поиск:
Полезные ссылки

  • Форум по MySQL

  • Статьи по MySQL

  • Вопросы по MySQL

  • MySQL.com


  • Базы данных

  • MySQL

  • PostgreSQL


  • PHP конференция 2005
    Подробности!

    6.3.5. Функции приведения типов

    Функция 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.

     
    © 1997-2005 PHP Club Team
    Rambler's Top100