通常的算术运算符都可用。结果根据以下规则确定:
-
如果两个操作数都是整数,并且任何一个是无符号的,则结果是一个无符号整数。对于减法,如果启用了
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
)。
由于这些规则和它们的应用,应该小心确保计算的组件和子组件使用适当的精度级别。请参阅 第 14.10 节,“Cast 函数和操作符”。
有关数字表达式评估中的溢出处理,请参阅 第 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
最后一个表达式产生错误,因为整数乘法的结果超过了
BIGINT
计算的 64 位范围。(请参阅 第 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 节,「数学函数」 中。