12.6.1 Арифметические операторы
Таблица 12.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).
Из-за этих правил и способа их применения необходимо следить за тем, чтобы компоненты и подкомпоненты вычисления использовали соответствующий уровень точности. См. Раздел 12.10, «Функции и операторы приведения типов».
Сведения об обработке переполнения при вычислении числовых выражений см. в Разделе 11.1.7, «Обработка значений, выходящих за пределы диапазона, и переполнения».
Арифметические операторы применяются к числам. Для других типов значений могут быть доступны альтернативные операции. Например, для добавления значений дат используйте DATE_ADD(); см. Раздел 12.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. (См. Раздел 11.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 -
Операция modulo. Возвращает остаток от деления
NнаM. Для получения дополнительной информации см. описание функцииMOD()в Разделе 12.6.2, «Математические функции».
© 2025 Oracle
Licensed under the GPLv2 License.