官方文档地址:12.6.1 Arithmetic Operators
表 12.9 算术运算符
名称 | 描述 |
---|---|
% ,MOD | 模运算符 |
* | 乘法运算符 |
+ | 加法运算符 |
- | 减法运算符 |
- | 改变参数的符号 |
/ | 除法运算符 |
DIV | 整数除法 |
可以使用常用的算术运算符。结果按以下规则确定:
- 在
-
、+
和*
的情况下,如果两个操作数都是整数,则以BIGINT
(64位)精度计算结果。 - 如果两个操作数都是整数且其中任何一个是无符号的,则结果为无符号整数。对于减法,如果
NO_UNSIGNED_SUBTRACTION
SQL 模式被启用,即使所有操作数都是无符号的,结果也是有符号的。 - 如果
+
、-
、/
、*
、%
运算的任一操作数是实值或字符串值,则结果的精度为具有最大精度的操作数的精度。 - 在使用
/
执行除法时,当使用两个精确值操作数时,结果保留的小数位数是第一个操作数的小数位数加上div_precision_increment
系统变量的值(默认为4)。例如,表达式5.05 / 0.014
的结果的刻度是小数点后6位(360.714286
)。
这些规则适用于每个操作,比如嵌套计算中每个组件计算的精度。因此,(14620 / 9432456) / (24250 / 9432456)
首先解析为(0.0014) / (0.0026)
,最终结果有8
位小数(0.60288653)
。
由于这些规则和它们的应用方式,应该注意确保计算的组件和子组件使用适当的精度级别。请参见 12.11 强制转换函数和操作符。
有关数值表达式求值中溢出处理的信息,参见 11.1.7 超出范围和溢出处理。
算术运算符适用于数字。对于其他类型的值,可以使用其他操作。例如,要添加日期值,使用DATE_ADD()
;请参阅 12.7 日期和时间函数。
+
加法:
mysql> SELECT 3+5;
-> 8
-
减法:
mysql> SELECT 3-5;
-> -2
-
一元运算-
。这个操作符改变操作数的符号。
mysql> SELECT - 2;
-> -2
注意
如果该操作符与BIGINT
一起使用,返回值也是一个BIGINT
。这意味着您应该避免在可能具有 −2E63 值的整数使用-
。
*
乘法:
mysql> SELECT 3*5;
-> 15
mysql> SELECT 18014398509481984*18014398509481984.0;
-> 324518553658426726783156020576256.0
mysql> SELECT 18014398509481984*18014398509481984;
-> out-of-range error
最后一个表达式会产生一个错误,因为整数乘法的结果超过了BIGINT
计算的64
位范围。(参见 11.1 数值数据类型)
/
除法:
mysql> SELECT 3/5;
-> 0.60
除 0 产生NULL
结果:
mysql> SELECT 102/(1-1);
-> NULL
只有在其结果能被转换为整数的上下文中执行除法时,才使用BIGINT
算术计算除法。
DIV
整数的除法。去掉除法结果中小数点右边的小数部分。
如果任一操作数具有非整数类型,则将操作数转换为DECIMAL
,并在将结果转换为BIGINT
之前使用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
的余数。有关更多信息,请参见 12.6.2 数学函数 中对MOD()
函数的描述。