算术运算符
名称 | 介绍 |
%,MOD | 取模运算符 |
* | 乘法运算符 |
+ | 加法运算符 |
- | 减法运算符 |
- | 改变参数的符号 |
/ | 除法运算符 |
DIV | 整数除法 |
常用的算术运算符结果按以下规则确定:
● 在运算 -、+、和 * 的情况下,如果两个操作数都是整数,则使用 BIGINT(64位)精度计算结果。
● 如果两个操作数都是整数,而其中任何一个都是无符号的,则结果是无符号整数。对于减法,如果启用了 NO_UNSIGNED_SUBTRACTION SQL 模式,则即使任何操作数都是无符号的,结果也是有符号的。
● 如果 +、-、/、*、% 的任何操作数是实数或字符串值,则结果的精度为具有最大精度的操作数的精度。
● 在用 / 执行除法时,使用两个精确值操作数时,结果的小数位数是第一个操作数的小数位数加上 div_precision_increment 系统变量的值(默认值为4)。例如,表达式 5.05 / 0.014 的结果保留到小数点后六位(360.714286)。
这些规则应用于每个操作,嵌套计算包含了每个组件的精度。因此,(14620 / 9432456) / (24250 / 9432456) 首先解析为 (0.0014) / (0.0026),最终结果有8位小数 (0.60288653)。
由于这些规则及其应用方式,应注意确保计算的组件和子组件使用适当的精度级别。
算术运算符适用于数字。对于其他类型的值,可以使用替代操作。例如,要增加日期值,请使用 DATE_ADD()。
● +
加法:
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
最后一个表达式产生错误,因为整数乘法的结果超出了 BIGINT 计算的 64 位范围。
● /
除法:
mysql> SELECT 3/5;
-> 0.60
被零除产生 NULL 结果:
mysql> SELECT 102/(1-1);
-> NULL
除法只有在其结果转换为整数的上下文中执行时,才使用 BIGINT 算术进行计算。
● DIV
整数除法。从除法结果中丢弃小数点右侧的小数部分。
如果任一操作数的类型为非整数,则在将结果转换为 BIGINT 之前,操作数将转换为 DECIMAL 并使用 DECIMAL 算术进行除法。如果结果超出 BIGINT 范围,则会发生错误。
mysql> SELECT 5 DIV 2, -5 DIV 2, 5 DIV -2, -5 DIV -2;
-> 2, -2, -2, 2
● N % M, N MOD M
模运算。返回 N 除以 M 的余数。
官方文档:
https://dev.mysql.com/doc/refman/8.0/en/arithmetic-functions.html