Spec-Zone.ru › MySQL 5.7

12.6.1 Арифметические операторы

Таблица 12.9 Арифметические операторы

Таблица 12.9 Арифметические операторы
Имя Описание
%, MOD Оператор modulo
* Оператор умножения
+ Оператор сложения
- Оператор вычитания
- Изменение знака аргумента
/ Оператор деления
DIV Целочисленное деление

Доступны обычные арифметические операторы. Результат определяется по следующим правилам:

  • В случае -, + и * результат вычисляется с точностью BIGINT (64-битная) если оба операнда являются целыми числами.

  • Если оба операнда — целые числа, и любой из них беззнаковый, результат — беззнаковое целое число. При вычитании, если включен SQL-режим NO_UNSIGNED_SUBTRACTION, результат — со знаком, даже если любой из операндов беззнаковый.

  • Если любой из операндов +, -, /, *, % является вещественным или строковым значением, точность результата — точность операнда с максимальной точностью.

  • При делении с использованием / масштаб результата при использовании двух операндов точного значения равен масштабу первого операнда плюс значение системной переменной div_precision_increment (по умолчанию 4). Например, результат выражения 5.05 / 0.014 имеет масштаб в шесть десятичных знаков (360.714286).

Эти правила применяются для каждой операции, так что вложенные вычисления предполагают точность каждого компонента. Таким образом, (14620 / 9432456) / (24250 / 9432456) вычисляется сначала как (0.0014) / (0.0026), и конечный результат имеет 8 десятичных знаков (0.60288653).

Из-за этих правил и способа их применения необходимо следить за тем, чтобы компоненты и подкомпоненты вычисления использовали соответствующий уровень точности. См. Раздел 12.10, «Функции и операторы приведения типов».

Сведения об обработке переполнения при вычислении числовых выражений см. в Разделе 11.1.7, «Обработка значений, выходящих за пределы диапазона, и переполнения».

Арифметические операторы применяются к числам. Для других типов значений могут быть доступны альтернативные операции. Например, для добавления значений дат используйте DATE_ADD(); см. Раздел 12.7, «Функции дат и времени».

  • +

    Сложение:

    mysql> SELECT 3+5;
            -> 8
    
  • -

    Вычитание:

    mysql> SELECT 3-5;
            -> -2
    
  • -

    Унарный минус. Этот оператор изменяет знак операнда.

    mysql> SELECT - 2;
            -> -2
    
    Примечание

    Если этот оператор используется с BIGINT, возвращаемое значение также является BIGINT. Это означает, что следует избегать использования - для целых чисел, которые могут иметь значение −263.

  • *

    Умножение:

    mysql> SELECT 3*5;
            -> 15
    mysql> SELECT 18014398509481984*18014398509481984.0;
            -> 324518553658426726783156020576256.0
    mysql> SELECT 18014398509481984*18014398509481984;
            -> out-of-range error
    

    Последнее выражение приводит к ошибке, так как результат умножения целых чисел превышает диапазон 64 бит вычислений BIGINT. (См. Раздел 11.1, «Числовые типы данных».)

  • /

    Деление:

    mysql> SELECT 3/5;
            -> 0.60
    

    Деление на ноль приводит к результату NULL:

    mysql> SELECT 102/(1-1);
            -> NULL
    

    Деление вычисляется с использованием арифметики BIGINT только в том случае, если его результат преобразуется в целое число.

  • DIV

    Целочисленное деление. Отбрасывает дробную часть результата деления справа от десятичной точки.

    Если у любого операнда тип не целое число, операнды преобразуются в DECIMAL и делятся с использованием арифметики DECIMAL перед преобразованием результата в BIGINT. Если результат превышает диапазон BIGINT, возникает ошибка.

    mysql> SELECT 5 DIV 2, -5 DIV 2, 5 DIV -2, -5 DIV -2;
            -> 2, -2, -2, 2
    
  • N % M, N MOD M

    Операция modulo. Возвращает остаток от деления N на M. Для получения дополнительной информации см. описание функции MOD() в Разделе 12.6.2, «Математические функции».

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-5.7-en/arithmetic-functions.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API