12.5.1 算术运算符

table12.8 算术运算符

NameDescription
%, MODModulo operator
*Multiplication operator
+Addition operator
-Minus operator
-更改参数的符号
/Division operator
DIVInteger division

可以使用通常的算术运算符。根据以下规则确定结果:

  • 对于-+*,如果两个操作数均为整数,则以BIGINT(64 位)精度计算结果。

  • 如果两个操作数都是整数,并且它们中的任何一个都是无符号的,则结果是无符号的整数。对于减法,如果启用了NO_UNSIGNED_SUBTRACTION SQL 模式,则即使对任何操作数都未签名,结果也会被签名。

  • 如果+-/*%的任何操作数是实数值或字符串值,则结果的精度是具有最大精度的操作数的精度。

  • 在使用/执行的除法中,使用两个精确值操作数时结果的小数位数是第一个操作数的小数加div_precision_increment系统变量的值(默认为 4)。例如,table 达式5.05 / 0.014的结果的小数位数为六位(360.714286)。

这些规则适用于每个操作,因此嵌套计算意味着每个组件的精度。因此,(14620 / 9432456) / (24250 / 9432456)首先解析为(0.0014) / (0.0026),最终结果具有 8 个小数位(0.60288653)。

由于存在这些规则及其应用方式,因此应注意确保计算的组成部分和子组成部分使用适当的精度级别。参见第 12.10 节“Broadcast 函数和运算符”

有关处理数值 table 达式评估中的溢出的信息,请参见第 11.1.7 节“超出范围和溢出处理”

算术运算符适用于数字。对于其他类型的值,可以使用替代操作。例如,要添加日期值,请使用DATE_ADD();参见第 12.6 节“日期和时间函数”

+

Addition:

mysql> SELECT 3+5;
        -> 8

-

Subtraction:

mysql> SELECT 3-5;
        -> -2

-

一元减。该运算符更改操作数的符号。

mysql> SELECT - 2;
        -> -2

Note

如果将此运算符与BIGINT一起使用,则返回值也是BIGINT。这意味着您应该避免在可能值为-263 的整数上使用-

*

Multiplication:

mysql> SELECT 3*5;
        -> 15
mysql> SELECT 18014398509481984*18014398509481984.0;
        -> 324518553658426726783156020576256.0
mysql> SELECT 18014398509481984*18014398509481984;
        -> out-of-range error

最后一个 table 达式产生错误,因为整数相乘的结果超出了BIGINT计算的 64 位范围。 (请参阅第 11.1 节“数值数据类型”。)

/

Division:

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 *的余数。有关更多信息,请参见第 12.5.2 节“math 函数”中有关MOD()功能的描述。