Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


14.6.1 算术运算符

表 14.9 算术运算符

Name Description
%、MOD 模运算符
* 乘法运算符
+ 加法运算符
- 减法运算符
- 改变参数的符号
/ 除法运算符
DIV 整数除法

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

  • -+*中,如果两个操作数都是整数,结果以BIGINT(64位)精度计算。

  • 如果两个操作数都是整数,并且其中任何一个是无符号的,那么结果也是无符号整数。对于减法,如果启用了NO_UNSIGNED_SUBTRACTION SQL 模式,结果即使有任何操作数是无符号也会是有符号。

  • 如果一个或多个+-/*%的操作数是实数或字符串值,那么结果的精度是最大精度的操作数的精度。

  • 在使用两个确切值操作数进行除法时,结果的scale 等于第一个操作数的scale 加上系统变量div_precision_increment 的值(默认为4)。例如,表达式5.05 / 0.014的结果scale 是六位小数(360.714286).

这些规则对每个操作都应用,嵌套计算意味着各个组件的精度。因此,(14620 / 9432456) / (24250 / 9432456)首先解析为(0.0014) / (0.0026)0.60288653).

由于这些规则的应用,需要注意计算组件和子组件使用适当的精度级别。见第14.10节,“转换函数和操作符”

关于数字表达式评估中的溢出处理信息,见第13.1.7节,“超范围和溢出处理”

算术操作符作用于数字。对于其他类型的值,可能存在alternative操作。例如,要添加日期值,请使用DATE_ADD();见第14.7节,“日期和时间函数”

  • +

    加法:

    mysql> SELECT 3+5;
            -> 8
  • -

    减法:

    mysql> SELECT 3-5;
            -> -2
  • -

    一元负号。该操作符将操作数的符号更改。

    mysql> SELECT - 2;
            -> -2
    Note

    如果使用该操作符与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位范围。请参阅第13.1节,“数值数据类型”

  • /

    除法:

    mysql> SELECT 3/5;
            -> 0.60

    除以零产生一个NULL结果:

    mysql> SELECT 102/(1-1);
            -> NULL

    在将结果转换为整数的上下文中,才执行BIGINT算术操作。

  • DIV

    整数除法。舍弃结果的小数部分右侧的所有数字。

    如果操作数之一不是整型, operands 将被转换为DECIMAL,然后使用DECIMAL 运算符进行除法,最后将结果转换为BIGINT。结果超过 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 的余数。更多信息,请参见MOD() 函数的描述,在第14.6.2节,“数学函数”中有详细信息。