Spec-Zone .ru
спецификации, руководства, описания, API

12.10. Функции броска и Операторы

Таблица 12.14. Функции броска

Имя Описание
BINARY Бросьте строку к двоичной строке
CAST() Снимите значение в качестве определенного типа
CONVERT() Снимите значение в качестве определенного типа

Обычно, невозможно сравнить a BLOB значение или другая двоичная строка нечувствительным к регистру способом, потому что у двоичных строк нет никакого набора символов, и таким образом никакого понятия lettercase. Чтобы выполнить нечувствительное к регистру сравнение, используйте CONVERT() функционируйте, чтобы преобразовать значение в недвоичную строку. Сравнения результата используют строковое сопоставление. Например, если у набора символов результата есть нечувствительное к регистру сопоставление, a LIKE работа не является чувствительной к регистру:

SELECT 'A' LIKE CONVERT(blob_col USING latin1) FROM tbl_name;

Чтобы использовать различный набор символов, замените его именем latin1 в предыдущем операторе. Чтобы определить определенное сопоставление для преобразованной строки, используйте a COLLATE пункт после CONVERT() вызовите, как описано в Разделе 10.1.9.2,"CONVERT() и CAST()". Например, чтобы использовать latin1_german1_ci:

SELECT 'A' LIKE CONVERT(blob_col USING latin1) COLLATE latin1_german1_ci  FROM tbl_name;

CONVERT() может использоваться более широко для того, чтобы сравнить строки, которые представляются в различных наборах символов.

LOWER()UPPER()) неэффективны, когда применялся к двоичным строкам (BINARY, VARBINARY, BLOB). Чтобы выполнить lettercase преобразование, преобразуйте строку в недвоичную строку:

mysql> SET @str = BINARY 'New York';mysql> SELECT LOWER(@str), LOWER(CONVERT(@str USING latin1));+-------------+-----------------------------------+| LOWER(@str) | LOWER(CONVERT(@str USING latin1)) |+-------------+-----------------------------------+| New York    | new york                          |+-------------+-----------------------------------+

Функции броска полезны, когда Вы хотите создать столбец с определенным типом в a CREATE TABLE ... SELECT оператор:

CREATE TABLE new_table SELECT CAST('2000-01-01' AS DATE);

Функции также могут быть полезными для сортировки ENUM столбцы в лексическом порядке. Обычно, сортировка ENUM столбцы происходят, используя внутренние числовые значения. Кастинг значений к CHAR результаты в лексическом виде:

SELECT enum_col FROM tbl_name ORDER BY CAST(enum_col AS CHAR);

CAST(str AS BINARY) та же самая вещь как BINARY str. CAST(expr AS CHAR) обрабатывает выражение как строку с набором символов значения по умолчанию.

CAST() также изменяет результат, если Вы используете его в качестве части более сложного выражения такой как CONCAT('Date: ',CAST(NOW() AS DATE)).

Недопустимо использовать CAST() извлечь данные в различных форматах, но вместо этого использовать строковые функции как LEFT() или EXTRACT(). См. Раздел 12.7, "Дата и Функции Времени".

Чтобы бросить строку к числовому значению в числовом контексте, Вы обычно ничего не должны сделать кроме использовать строковое значение, как если бы это было число:

mysql> SELECT
        1+'1';       -> 2

Если Вы используете строку в арифметической работе, это преобразовывается в число с плавающей точкой во время вычисления выражения.

Если Вы используете число в строковом контексте, число автоматически преобразовывается в строку:

mysql> SELECT CONCAT('hello you ',2);        -> 'hello you 2'

Для получения информации о неявном преобразовании чисел к строкам см. Раздел 12.2, "Преобразование типов в Вычислении выражения".

MySQL поддерживает арифметику и с подписанными и с 64-разрядными значениями без знака. Если Вы используете числовые операторы (такой как + или -) и один из операндов является целым без знака, результат без знака по умолчанию (см. Раздел 12.6.1, "Арифметические Операторы"). Можно переопределить это при использовании SIGNED или UNSIGNED оператор броска, чтобы бросить значение к подписанному или 64-разрядному целому числу без знака, соответственно.

mysql> SELECT CAST(1-2 AS UNSIGNED)        -> 18446744073709551615mysql> SELECT CAST(CAST(1-2 AS UNSIGNED) AS SIGNED);        -> -1

Если любой операнд является значением с плавающей точкой, результат является значением с плавающей точкой и не влияется предыдущим правилом. (В этом контексте, DECIMAL значения столбцов расцениваются как значения с плавающей точкой.)

mysql> SELECT CAST(1 AS UNSIGNED) -
        2.0;        -> -1.0

Режим SQL влияет на результат операций преобразования. Примеры:

Для получения дополнительной информации см. Раздел 5.1.7, "Режимы SQL Сервера".