14.6.1 Арифметические операторы
Таблица 14.9 Арифметические операторы
Доступны обычные арифметические операторы. Результат определяется по следующим правилам:
В случае с
-,+и*, результат вычисляется с точностью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).
Из-за этих правил и способа их применения следует быть внимательным, чтобы компоненты и подкомпоненты вычисления использовали соответствующий уровень точности. См. Раздел 14.10, «Функции и операторы приведения типов».
Сведения об обработке переполнения при вычислении числовых выражений см. в Разделе 13.1.7, «Обработка значений вне диапазона и переполнения».
Арифметические операторы применяются к числам. Для других типов значений могут быть доступны альтернативные операции. Например, для добавления дат используйте DATE_ADD(); см. Раздел 14.7, «Функции дат и времени».
-
Сложение:
mysql>
SELECT 3+5;-> 8 -
Вычитание:
mysql>
SELECT 3-5;-> -2 -
Унарный минус. Этот оператор меняет знак операнда.
mysql>
SELECT - 2;-> -2 -
Умножение:
mysql>
SELECT 3*5;-> 15 mysql>SELECT 18014398509481984*18014398509481984.0;-> 324518553658426726783156020576256.0 mysql>SELECT 18014398509481984*18014398509481984;-> out-of-range errorПоследнее выражение приводит к ошибке, так как результат целочисленного умножения превышает 64-битный диапазон вычислений
BIGINT. (См. Раздел 13.1, «Числовые типы данных».) -
Деление:
mysql>
SELECT 3/5;-> 0.60Деление на ноль приводит к результату
NULL:mysql>
SELECT 102/(1-1);-> NULLДеление вычисляется с арифметикой
BIGINTтолько в контексте, где его результат преобразуется в целое число. -
Целочисленное деление. Отбрасывает дробную часть результата деления справа от десятичной точки.
Если любой из операндов имеет нецелочисленный тип, операнды преобразуются в
DECIMALи делятся с помощью арифметикиDECIMALперед преобразованием результата вBIGINT. Если результат превышаетBIGINTдиапазон, возникает ошибка.mysql>
SELECT 5 DIV 2, -5 DIV 2, 5 DIV -2, -5 DIV -2;-> 2, -2, -2, 2 -
Операция модуля. Возвращает остаток от деления
NнаM. Дополнительную информацию см. в описании функцииMOD()в Разделе 14.6.2, «Математические функции».
© 2025 Oracle
Licensed under the GPLv2 License.