



数学函数主要用于处理数值数据。主要的数学函数有绝对值函数、三角函数(包括正弦函数、余弦函数、正切函数、余切函数等)、对数函数、随机数函数等。当有错误产生时,数学函数将会返回NULL。本节将介绍各种数学函数的功能和用法。
ABS(X)返回X的绝对值。
【 例4.1 】求2、−3.3和−33的绝对值,SQL语句如下:
mysql>SELECT ABS(2), ABS(-3.3), ABS(-33);
+--------+-----------+----------+
| ABS(2) | ABS(-3.3) | ABS(-33) |
+--------+-----------+----------+
| 2 | 3.3 | 33 |
+--------+-----------+----------+
正数的绝对值是其本身,因此2的绝对值为2;负数的绝对值是其相反数,因此−3.3的绝对值为3.3,−33的绝对值为33。
PI()返回圆周率的值,默认显示的小数位数是6位。
【 例4.2 】返回圆周率值,SQL语句如下:
mysql> SELECT pi();
+----------+
| pi() |
+----------+
| 3.141593 |
+----------+
返回结果保留了7位有效数字。
SQRT(x)返回非负数x的平方根。
【 例4.3 】求9、40和−49的平方根,SQL语句如下:
9的平方根为3,40的平方根为6.324555320336759;而负数没有平方根,因此−49返回的结果为NULL。
MOD(x,y)返回x被y除后的余数。MOD()对带有小数部分的数值也起作用,它返回除法运算后的精确余数。
【 例4.4 】对(31,8)、(234, 10)、(45.5,6)进行求余运算,SQL语句如下:
CEIL(x)和CEILING(x)的意义相同,返回不小于x的最小整数值,返回值转换为一个BIGINT。
【 例4.5 】使用CEILING(x)的函数返回最小整数,SQL语句如下:
mysql> SELECT CEIL(-3.35),CEILING(3.35);
+-------------+---------------+
| CEIL(-3.35) | CEILING(3.35) |
+-------------+---------------+
| -3 | 4 |
+-------------+---------------+
−3.35为负数,不小于−3.35的最小整数为−3,因此返回值为−3;不小于3.35的最小整数为4,因此返回值为4。
FLOOR(x)返回不大于x的最大整数值,返回值转换为一个BIGINT。
【 例4.6 】使用FLOOR(x)函数返回最大整数,SQL语句如下:
mysql> SELECT FLOOR(-3.35), FLOOR(3.35);
+--------------+-------------+
| FLOOR(-3.35) | FLOOR(3.35) |
+--------------+-------------+
| -4 | 3 |
+--------------+-------------+
−3.35为负数,不大于−3.35的最大整数为−4,因此返回值为−4;不大于3.35的最大整数为3,因此返回值为3。
RAND(x)返回一个随机浮点值v,范围在0到1之间(0 ≤ v ≤ 1.0)。若已指定一个整数参数x,则它被用作种子值,用来产生重复序列。
【 例4.7 】使用不带参数的RAND()函数产生随机数,SQL语句如下:
mysql> SELECT RAND(),RAND(),RAND();
+--------------------+---------------------+--------------------+
| RAND() | RAND() | RAND() |
+--------------------+---------------------+--------------------+
| 0.1380485446546679 | 0.45428662510056667 | 0.8572875222724746 |
+--------------------+---------------------+--------------------+
可以看到,不带参数的RAND()每次产生的随机数值是不同的。
【 例4.8 】使用带参数的RAND(x)函数产生随机数,SQL语句如下:
mysql> SELECT RAND(10),RAND(10),RAND(11);
+--------------------+--------------------+-------------------+
| RAND(10) | RAND(10) | RAND(11) |
+--------------------+--------------------+-------------------+
| 0.6570515219653505 | 0.6570515219653505 | 0.907234631392392 |
+--------------------+--------------------+-------------------+
可以看到,当RAND(x)的参数x相同时,将产生相同的随机数;当参数x不同时,产生不同的随机数。
ROUND(x)返回最接近于参数x的整数,即对x值进行四舍五入。
【 例4.9 】使用ROUND(x)函数对操作数进行四舍五入操作,SQL语句如下:
mysql> SELECT ROUND(-1.14),ROUND(-1.67), ROUND(1.14),ROUND(1.66);
+--------------+--------------+-------------+-------------+
| ROUND(-1.14) | ROUND(-1.67) | ROUND(1.14) | ROUND(1.66) |
+--------------+--------------+-------------+-------------+
| -1 | -2 | 1 | 2 |
+--------------+--------------+-------------+-------------+
可以看到,对参数x进行四舍五入处理之后,只保留了各个值的整数部分。
ROUND(x,y)返回最接近于参数x的数,若y为正值,则将保留到小数点后面y位;若y为负值,则将保留到小数点左边y位。
【 例4.10 】使用ROUND(x,y)函数对操作数进行四舍五入操作,结果保留小数点后面指定y位,SQL语句如下:
mysql> SELECT ROUND(1.38, 1), ROUND(1.38, 0), ROUND(232.38, -1), ROUND(232.38,-2);
+----------------+----------------+-------------------+-----------------+
| ROUND(1.38, 1) | ROUND(1.38, 0) | ROUND(232.38, -1) | ROUND(232.38,-2)|
+----------------+----------------+-------------------+-----------------+
| 1.4 | 1 | 230 | 200 |
+----------------+----------------+-------------------+-----------------+
ROUND(1.38, 1)保留小数点后面1位,四舍五入的结果为1.4;ROUND(1.38, 0)保留小数点后面0位,即返回四舍五入后的整数值; ROUND(23.38, -1)和ROUND (232.38,-2)分别保留小数点左边1位和2位。
提示 y值为负数时,保留的小数点左边的相应位数直接保存为0,不进行四舍五入。
TRUNCATE(x,y)返回被舍去至小数点后y位的数值x。若y为0,则结果不带有小数部分;若y为负数,则截去(归零数值)x自小数点左起第y位开始的所有低位的值。
【 例4.11 】使用TRUNCATE(x,y)函数对操作数进行截取操作,结果保留小数点后面指定y位,SQL语句如下:
mysql> SELECT TRUNCATE(1.31,1), TRUNCATE(1.99,1), TRUNCATE(1.99,0),
TRUNCATE(19.99,-1);
+----------------+----------------+----------------+-------------------+
|TRUNCATE(1.31,1)|TRUNCATE(1.99,1)|TRUNCATE(1.99,0)| TRUNCATE(19.99,-1)|
+----------------+----------------+----------------+-------------------+
| 1.3 | 1.9 | 1 | 10 |
+----------------+----------------+----------------+-------------------+
TRUNCATE(1.31,1)和TRUNCATE(1.99,1)都保留小数点后1位数字,返回值分别为1.3和1.9;TRUNCATE(1.99,0)返回整数部分1;TRUNCATE(19.99,−1)截去自小数点左边第1位开始的所有值,并将对应的整数部分置0,结果为10。
提示 ROUND(x,y)函数在截取值的时候会进行四舍五入,而TRUNCATE (x,y)直接截取值,并不进行四舍五入。
SIGN(x)返回参数的符号,x的值分别为负、0或正时,返回结果依次为−1、0或1。
【 例4.12 】使用SIGN(x)函数返回参数的符号,SQL语句如下:
mysql> SELECT SIGN(-21),SIGN(0), SIGN(21);
+-----------+---------+----------+
| SIGN(-21) | SIGN(0) | SIGN(21) |
+-----------+---------+----------+
| -1 | 0 | 1 |
+-----------+---------+----------+
SIGN(−21)返回−1;SIGN(0)返回0;SIGN(21)返回1。
POW(x,y)或者POWER(x,y)函数返回x的y次乘方的结果值。
【 例4.13 】使用POW(x,y)和POWER(x,y)函数进行乘方运算,SQL语句如下:
mysql> SELECT POW(2,2), POWER(2,2),POW(2,-2), POWER(2,-2);
+----------+------------+-----------+-------------+
| POW(2,2) | POWER(2,2) | POW(2,-2) | POWER(2,-2) |
+----------+------------+-----------+-------------+
| 4 | 4 | 0.25 | 0.25 |
+----------+------------+-----------+-------------+
可以看到,POW和POWER的结果是相同的,POW(2,2)和POWER(2,2)返回2的2次方,结果都是4;POW(2,−2)和POWER(2,−2)都返回2的−2次方,结果为4的倒数,即0.25。
EXP(x)返回e的x次乘方的结果值。
【 例4.14 】使用EXP(x)函数计算e的乘方,SQL语句如下:
mysql> SELECT EXP(3),EXP(-3),EXP(0);
+---------------------------+---------------------------+--------+
| EXP(3) | EXP(-3) | EXP(0) |
+---------------------------+---------------------------+--------+
| 20.085536923187668 | 0.049787068367863944 | 1 |
+---------------------------+---------------------------+--------+
EXP(3)计算以e为底的3次方,结果为20.085536923187668;EXP(−3)计算以e为底的−3次方,结果为0.049787068367863944;EXP(0)计算以e为底的0次方,结果为1。
LOG(x)返回x的自然对数,即x相对于基数e的对数。
【 例4.15 】使用LOG(x)函数计算自然对数,SQL语句如下:
mysql> SELECT LOG(3), LOG(-3);
+--------------------+---------+
| LOG(3) | LOG(-3) |
+--------------------+---------+
| 1.0986122886681098 | NULL |
+--------------------+---------+
对数定义域不能为负数,因此LOG(−3)的返回结果为NULL。
LOG10(x)返回x的基数为10的对数。
【 例4.16 】使用LOG10(x)计算以10为基数的对数,SQL语句如下:
mysql> SELECT LOG10(2), LOG10(100), LOG10(-100);
+--------------------+------------+-------------+
| LOG10(2) | LOG10(100) | LOG10(-100) |
+--------------------+------------+-------------+
| 0.3010299956639812 | 2 | NULL |
+--------------------+------------+-------------+
10的2次方等于100,因此LOG10(100)的返回结果为2;LOG10(−100)的定义域为负,因此返回NULL。
RADIANS(x)将参数x由角度转换为弧度。
【 例4.17 】使用RADIANS(x)将角度转换为弧度,SQL语句如下:
mysql> SELECT RADIANS(90),RADIANS(180);
+--------------------+-------------------+
| RADIANS(90) | RADIANS(180) |
+--------------------+-------------------+
| 1.5707963267948966 | 3.141592653589793 |
+--------------------+-------------------+
DEGREES(x)将参数x由弧度转换为角度。
【 例4.18 】使用DEGREES(x)将弧度转换为角度,SQL语句如下:
mysql> SELECT DEGREES(PI()), DEGREES(PI() / 2);
+---------------+-------------------+
| DEGREES(PI()) | DEGREES(PI() / 2) |
+---------------+-------------------+
| 180 | 90 |
+---------------+-------------------+
SIN(x)返回x的正弦值,其中x为弧度值。
【 例4.19 】使用SIN(x)函数计算正弦值,SQL语句如下:
mysql> SELECT SIN(1), ROUND(SIN(PI()));
+--------------------+------------------+
| SIN(1) | ROUND(SIN(PI())) |
+--------------------+------------------+
| 0.8414709848078965 | 0 |
+--------------------+------------------+
ASIN(x)返回x的反正弦值,即正弦为x的值。若x不在−1~1的范围之内,则返回NULL。
【 例4.20 】使用ASIN(x)函数计算反正弦值,SQL语句如下:
mysql> SELECT ASIN(0.8414709848078965), ASIN(3);
+--------------------------+---------+
| ASIN(0.8414709848078965) | ASIN(3) |
+--------------------------+---------+
| 1 | NULL |
+--------------------------+---------+
对比【例4.19】和【例4.20】可以看到,函数ASIN(x)和SIN(x)互为反函数;ASIN(3)中的参数3超出了正弦值的范围,因此返回NULL。
COS(x)返回x的余弦值,其中x为弧度值。
【 例4.21 】使用COS(x)函数计算余弦值,SQL语句如下:
mysql> SELECT COS(0),COS(PI()),COS(1);
+--------+-----------+--------------------+
| COS(0) | COS(PI()) | COS(1) |
+--------+-----------+--------------------+
| 1 | -1 | 0.5403023058681398 |
+--------+-----------+--------------------+
ACOS(x)返回x的反余弦值,即余弦是x的值。若x不在−1~1的范围之内,则返回NULL。
【 例4.22 】使用ACOS(x)函数计算反余弦值,SQL语句如下:
mysql> SELECT ACOS(1),ACOS(0), ROUND(ACOS(0.5403023058681398));
+---------+--------------------+---------------------------------+
| ACOS(1) | ACOS(0) | ROUND(ACOS(0.5403023058681398)) |
+---------+--------------------+---------------------------------+
| 0 | 1.5707963267948966 | 1 |
+---------+--------------------+---------------------------------+
对比【例4.21】和【例4.22】可以看到,函数ACOS(x)和COS(x)互为反函数。
TAN(x)返回x的正切值,其中x为给定的弧度值。
【 例4.23 】使用TAN(x)函数计算正切值,SQL语句如下:
mysql> SELECT TAN(0.3), ROUND(TAN(PI()/4));
+---------------------+--------------------+
| TAN(0.3) | ROUND(TAN(PI()/4)) |
+---------------------+--------------------+
| 0.30933624960962325 | 1 |
+---------------------+--------------------+
ATAN(x)返回x的反正切值,即正切为x的值。
【 例4.24 】使用ATAN(x)函数计算反正切值,SQL语句如下:
mysql> SELECT ATAN(0.30933624960962325), ATAN(1);
+---------------------------+--------------------+
| ATAN(0.30933624960962325) | ATAN(1) |
+---------------------------+--------------------+
| 0.3 | 0.7853981633974483 |
+---------------------------+--------------------+
对比【例4.23】和【例4.24】可以看到,函数ATAN(x)和TAN(x)互为反函数。
COT(x)返回x的余切值,其中x为给定的弧度值。
【 例4.25 】使用COT(x)函数计算余切值,SQL语句如下:
mysql> SELECT COT(0.3), 1/TAN(0.3),COT(PI() / 4);
+--------------------+--------------------+--------------------+
| COT(0.3) | 1/TAN(0.3) | COT(PI() / 4) |
+--------------------+--------------------+--------------------+
| 3.2327281437658275 | 3.2327281437658275 | 1.0000000000000002 |
+--------------------+--------------------+--------------------+
由结果可以看到,函数COT(x)和TAN(x)互为倒函数。