MySQL 函数和运算符:数值函数和运算符

来自Wikioe
跳到导航 跳到搜索


算术运算符

Name Description
%, MOD Modulo operator【取模,即取余数】
* Multiplication operator
+ Addition operator
- Minus operator
- 更改参数的符号【一元减】
/ Division operator
DIV 整数除法【结果只取整数部分】

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

  1. 对于“+”,“-”和“*”,如果两个操作数均为整数,则以“BIGINT”(64 位)精度计算结果。
  2. 如果两个操作数都是整数,并且它们中的任何一个都是无符号的,则结果是无符号的整数。对于减法,如果启用了“NO_UNSIGNED_SUBTRACTION” SQL 模式,则即使对任何操作数都是无符号的,结果也是无符号数。
  3. 如果“+”,“-”,“*”,“/”,“%”的任何操作数是实数值或字符串值,则结果的精度是具有最大精度的操作数的精度
  4. 在使用“/”执行的除法中,使用两个精确值操作数时结果的小数位数是第一个操作数的小数加“div_precision_increment”(默认为 4)系统变量的值
    例如,表达式“5.05 / 0.014”的结果的小数位数为六位:“360.714286”。

数学函数

Option Name Description
ABS() 返回绝对值
ACOS() 返回反余弦
ASIN() 返回反正弦
ATAN() 返回反正切
ATAN2(), ATAN() 返回两个参数的反正切
CEIL() 返回不小于参数的最小整数值
CEILING() 返回不小于参数的最小整数值
CONV() 在不同的基数之间转换数字【???】
COS() 返回余弦
COT() 返回余切
CRC32() 计算循环冗余校验值
DEGREES() 将弧度转换为度
EXP() 返回e的幂(e 为自然对数的底)【反函数是“LOG()”(仅使用单个参数)或“LN()”】
FLOOR() 返回不大于参数的最大整数值
LN() 返回参数的自然对数
LOG() 返回第一个参数的自然对数
LOG10() 返回参数的以 10 为底的对数
LOG2() 返回参数的以 2 为底的对数
MOD() 取余
PI() 返回 pi 的值
POW() 将自变量提高到指定的
POWER() 将自变量提高到指定的
RADIANS() 返回参数转换为弧度
RAND() 返回一个随机浮点值
ROUND() 返回近似值(四舍五入)【】
SIGN() 返回参数的符号
SIN() 返回参数的正弦
SQRT() 返回参数的平方根
TAN() 返回参数的正切值
TRUNCATE() 截断为指定的小数位数
  • 发生错误时,所有 math 函数均返回“NULL”。


CONV(N,from_base,to_base)”:在不同的数字基数之间转换数字。返回数字“N”的字符串表示形式,从基数“from_base”转换为基数“to_base”。【???】

  • 如果任何参数为 NULL,则返回 NULL。
  • 参数“N”被解释为整数,但可以指定为整数或字符串。
  • 最小底数是 2,最大底数是 36。如果“from_base”为负数,则“N”被视为带符号的数字。否则,“N”被视为无符号数。
  • “CONV()”以 64 位精度工作。
mysql> SELECT CONV('a',16,2);
        -> '1010'
mysql> SELECT CONV('6E',18,8);
        -> '172'
mysql> SELECT CONV(-17,10,-18);
        -> '-H'
mysql> SELECT CONV(10+'10'+'10'+X'0a',10,10);
        -> '40'


ROUND(X), ROUND(X,D)”:将参数“X”舍入为“D”小数位。

  • 舍入算法取决于“X”的数据类型
  • “D”如果未指定,则默认为0
  • “D”可以为负,导致“D”值“X”小数点后的数字变为零。
  • “D”的最大绝对值为30;超过30(或-30)的任何数字都将被截断。
mysql> SELECT ROUND(-1.23);
        -> -1
mysql> SELECT ROUND(-1.58);
        -> -2
mysql> SELECT ROUND(1.58);
        -> 2
mysql> SELECT ROUND(1.298, 1);
        -> 1.3
mysql> SELECT ROUND(1.298, 0);
        -> 1
mysql> SELECT ROUND(23.298, -1);
        -> 20
mysql> SELECT ROUND(.12345678901234567890123456789012345, 35);
        -> 0.123456789012345678901234567890

“ROUND()”根据第一个参数的类型使用以下规则:

  • 对于精确值数字,“ROUND()”使用“从零开始舍入一半”或“向最接近的舍入”规则:
    1. 小数部分为“.5”或更大的值时:如果为正数,则入到下一个整数;如果为负数,则舍到下一个整数。(换句话说,四舍五入到零)
    2. 小数部分小于“.5”的值:如果为正数,则舍到下一个整数;如果为负数,则入到下一个整数。
  • 对于近似值数字,结果取决于 C 库。在许多系统上,这意味着“ROUND()”使用“四舍五入到最接近的偶数”规则:小数部分恰好位于两个整数中间的值将四舍五入为最接近的偶数整数。
mysql> SELECT ROUND(2.5), ROUND(25E-1);
+------------+--------------+
| ROUND(2.5) | ROUND(25E-1) |
+------------+--------------+
| 3          |            2 |
+------------+--------------+


TRUNCATE(X,D)”:返回数字将“X”截取“D”小数位。

  • 所有数字均四舍五入
  • 如果“D”是0,则结果没有小数点或小数部分。
  • “D”可以为负,导致“D”值“X”小数点后的数字变为零。
mysql> SELECT TRUNCATE(1.223,1);
        -> 1.2
mysql> SELECT TRUNCATE(1.999,1);
        -> 1.9
mysql> SELECT TRUNCATE(1.999,0);
        -> 1
mysql> SELECT TRUNCATE(-1.999,1);
        -> -1.9
mysql> SELECT TRUNCATE(122,-2);
       -> 100
mysql> SELECT TRUNCATE(10.28*100,0);
       -> 1028