Spec-Zone .ru
спецификации, руководства, описания, API
|
Обычные арифметические операторы доступны. Результат определяется согласно следующим правилам:
В случае -
, +
, и *
, результат вычисляется с BIGINT
(64-разрядная) точность, если оба операнда являются целыми
числами.
Если оба операнда являются целыми числами, и любой из них без знака, результатом
является целое без знака. Для вычитания, если NO_UNSIGNED_SUBTRACTION
Режим SQL включается, результат
подписывается, даже если какой-либо операнд без знака.
Если любой из операндов a +
, -
, /
, *
, %
вещественное число или строковое значение, точность результата является
точностью операнда с максимальной точностью.
В подразделении, выполняемом с /
, масштаб результата при использовании двух операндов точного значения
является масштабом первого операнда плюс значение div_precision_increment
системная переменная (который является 4 по
умолчанию). Например, результат выражения 5.05 / 0.014
имеет масштаб шести
десятичных разрядов (360.714286
).
Эти правила применяются для каждой работы, так, что вложенные вычисления подразумевают точность каждого
компонента. Следовательно, (14620 / 9432456) / (24250 / 9432456)
, решения сначала к
(0.0014) / (0.0026)
, с окончательным результатом, имеющим 8 десятичных разрядов
(0.60288653
).
Из-за этих правил и пути они применяются, забота должна быть проявлена, чтобы гарантировать, что компоненты и субкомпоненты вычисления используют соответствующий уровень точности. См. Раздел 12.10, "Функции броска и Операторы".
Для получения информации об обработке переполнения в оценке числового выражения см. Раздел 11.2.6, "Из диапазона и Обработка Переполнения".
Арифметические операторы применяются к числам. Для других типов значений альтернативные операции могут быть
доступными. Например, чтобы добавить значения даты, использовать DATE_ADD()
; см. Раздел 12.7, "Дата
и Функции Времени".
Дополнение:
mysql> SELECT 3+5;
-> 8
Вычитание:
mysql> SELECT 3-5;
-> -2
Унарный минус. Этот оператор изменяет знак операнда.
mysql> SELECT - 2;
-> -2
Умножение:
mysql>SELECT 3*5;
-> 15mysql>SELECT 18014398509481984*18014398509481984.0;
-> 324518553658426726783156020576256.0mysql>SELECT 18014398509481984*18014398509481984;
-> out-of-range error
Последнее выражение производит ошибку, потому что результат целочисленного умножения превышает
64-разрядный диапазон BIGINT
вычисления. (См. Раздел
11.2, "Числовые Типы".)
Подразделение:
mysql> SELECT 3/5;
-> 0.60
Подразделение нулем производит a NULL
результат:
mysql> SELECT 102/(1-1);
-> NULL
Подразделение вычисляется с BIGINT
арифметика, только если выполняемый в контексте, где его
результат преобразовывается в целое число.
Целочисленное деление. Подобный FLOOR()
, но безопасно с BIGINT
значения.
В MySQL 5.7, если у любого операнда есть тип нецелого числа, операнды преобразовываются в DECIMAL
и разделенное использование DECIMAL
арифметика прежде, чем преобразовать результат в BIGINT
. Если результат превышает BIGINT
диапазон, ошибка происходит.
mysql> SELECT 5 DIV 2;
-> 2
Работа по модулю. Возвращает остаток от N
разделенный на
M
. Для получения дополнительной информации см. описание
для MOD()
функция в Разделе 12.6.2, "Математические Функции".