13.2数学函数
数学函数是MySQL中常用的一类函数。主要用于处理数字,包括整型、浮点数等。 数学函数包括绝对值函数、正弦函数、余弦函数和获取随机数的函数等。下面是各种数学 函数的符号、作用,下表所示。
函数 | 作用 |
---|---|
ABS(x) | 返回x的绝对值 |
CEIL(x),CEILING(x) | 返回大于或者等于x的最小整数 |
FLOOR(x) | 返回小于或者等于x的最大整数 |
RAND() | 返回0~1的随机数 |
SIGN(x) | 返回x的符号,x是负数、0、整数分别返回-1、和1 |
PI(x) | 返回圆周率(3.141593) |
TRUNCATE(x) | 返回数值x保留到小数点后y位的值 |
ROUND(x) | 返回离x的最近的整数 |
ROUND(x,y) | 保留x小数点后y位的值,但截断是要进行四舍五入 |
POW(x,y),POWER(x,y) | 返回x的y次方 |
SQRT(x) | 返回x的平方根 |
EXP(x) | 返回e的x次方 |
MOD(x,y) | 返回x除以y的余数 |
LOG(x) | 返回自然对数 |
LOG10(x) | 返回以10为底的对数 |
RADIAN(x) | 将角度转换为弧度 |
DEGREES(x) | 将弧度转换为角度 |
SIN(x) | 求正弦值 |
ASIN(x) | 求反正弦值 |
COS(x) | 求余弦值 |
ACOS(x) | 求反余弦的值 |
TAN(x) | 求正切值 |
ATAN(x),ATN2(x) | 求反正切的值 |
COT(x) | 求余切的值 |
13.2.1绝对值函数ABS(x)和返回圆周率的函数PI()
ABS(x)用来求绝对值;PI()用来返回圆周率。
【示例13-1】下面将演示ABS(x)、PI()这两个函数的使用。
mysql>SELECT ABS(0.5),ABS(-0.5),PI(); +----------+-----------+--------+ | ABS(0.5) | ABS(-0.5) | PI() | +----------+-----------+--------+ | 0.5 | 0.5 |3.141593| +----------+-----------+--------+ 1 row in set(0.00 sec)
结果显示,ABS(0.5)和人ABS(-0.5)返回结果都是0.5,也就是返回了这两个数字的绝对值;PI()返回结果是常量3.141593,这正是圆周率的值。
13.2.2 平方根函数SQRT(x)和求余函数MOD(x,y)
SQRT(x)用来求平方根;MOD(x,y)用来求余数。
【示例13-2】下面将演示SQRT(x)、MOD(x,y)两个函数的使用.
mysql> SELECT SQRT(16), SQRT(2), MOD(5,2); +----------+----------------+----------+ | SQRT(16) | SQRT(2) | MOD(5,2) | +----------+----------------+----------+ | 4 |1.4142135623731 | 1 | +----------+----------------+----------+ 1 row in set (0.00 sec)
结果显示,SQRT(16)和SQRT(2)返回的值分别是4和1.4142135623730951,结果正好分别是16和2的平方根;MOD(5,2)返回余数1。
13.2.3 获取整数的函数CEIL(x),CEILIN(x),FLOOR(x)
CEIL(x)和CEILING(x)这两个函数返回大于或者等于x的最小整数;FLOOR(x)函数返回小于或者等于x的最大整数。
【13-3】下面将演示CEIL(x),CEILIN(x),FLOOR(x)3个函数的使用
mysql>SELECT CEIL(2.3),CEIL(-2.3),CEILIN(2.3),CEILIN(-2.3); +-----------+------------+-------------+--------------+ | CEIL(2.3) | CEIL(-2.3) | CEILIN(2.3) | CEILIN(-2.3) | +-----------+------------+-------------+--------------+ | 3 | -2 | 3 | -2 | +-----------+------------+-------------+--------------+ 1 row in set (0.00 sec) mysql>SELECT FLOOR(2.3),FLOOR(-2.3); +----------+-------------+ |FLOOR(2.3)| FLOOR(-2.3) | +----------+-------------+ | 2 | -3 | +----------+-------------+ 1 row in set (0.00 sec)
结果显示CEIL(2.3)返回的结果为3,因为3是大于2.3的最小整数;CEIL(-2.3)返回的结果为-2,因为-2是大于-2.3的最小整数;CEILING(2.3)与CEIL(2.3)的结果是一样的, CEILING(-2.3)与CEIL(-2.3)的结果是一样的;FLOOR(2.3)返回的结果为2,因为2是小于 2.3的最大整数;FLOOR(-2.3)返回的结果为-3,因为-3是小于-2.3的最大整数。
说明:CEIL(x)和CEILING()函数返回大于或等于x的最小整数,这相当于直接进行进位处理。FLOOR()函数返回小于或等于x的最大整数,这相当于直接舍掉数字x的小数部分。读者要留意这两个函数与后面介绍的ROUND(x)* TRUNCATE(x,y) 函数的区别。
13.2.4 获取随机数的函数RAND()和RAND(x)
RAND()和RAND(x)这两个函数都是返回0~l的随机数。但是RAND()返回的数是完全随机的,而RAND(x)函数的x相同时返回的值是相同的。
【示例13-4】下面将演示RAND()和 RAND(x)两个函数的使用。
mysql>SELECT RAND(),RAND(),RAND(2),RAND(2); +--------------------+------------------+--------------------+---------------------+ | RAND() | RAND() | RAND(2) | RAND(2) | +--------------------+------------------+--------------------+---------------------+ | 0.9852354330804529 | 0.92244033135701 | 0.6555866465490187 | 0.6555866465490187 | +--------------------+------------------+--------------------+---------------------+ 1 row in set (0.00 sec)
结果显示,两个RANDO函数返回的结果是不一样的。而两个RAND(2)返回的结果是 一样的。
mysql> SELECT RAND(2), RAND(3); +--------------------+--------------------+ | RAND(2> | RAND(3) | +--------------------+--------------------+ | 0.6555866465490187 | 0.9057697559760601 | +--------------------+--------------------+ 1 row in set (0.00 sec)
结果显示,RAND(2)和RAND(3)返回的结果是不同的。
13.2.5 四舍五入函数ROUND(x)、ROUND(x,y)、TRUNCATE(x,y)
ROUND()函数返回离x最近的整数,也就是对x进行四舍五入处理;ROUND(x,y) 函数返回义保留到小数点后y位的值,截断时需要进行四舍五入处理;TRUNCATE(x,y)函数返回x保留到小数点后y位的值。
【示例13-5】下面将演示ROUND(x)、ROUND(x,y)、 TRUNCATE(x,y)3个函数的使用。
mysql> SELECT ROUND(2.3), ROUND(2.5), ROUND(2.53,1), ROUND(2.55,1); +------------+------------+---------------+---------------+ | ROUND(2.3) | ROUND(2.5) | ROUND(2.53,1) | ROUND(2.55,1) | +------------+------------+---------------+---------------+ | 2 | 3 | 2.5 | 2.6 | +------------+------------+---------------+---------------+ 1 row in set (0.00 sec)
结果显示,ROUND(2.3)返回的结果是2,ROUND(2.5)返回的结果是3。这说明ROUND函数返回了整数,而且进行四舍五入处理。ROUND(2.53,1)返回的结果是2.5, ROUND(2.55,1)返回的结果是2.6。这两个数都保留了小数点后一位,而且进行了四舍五入处理。
注意:ROUND(x)和ROUND(x,y)可以对数字进行四舍五入处理。前者进位成整数,后者进位成指定长度的'小数。TRUNCATE(x,y)直接将小数按照指定长度进行截断, 不进行任何四舍五入的处理。因此,在选择这两种函数的时候一定特别注意。
13.2.6 符号函数SIGN(x)
【示例13-6】下面将演示SIGN(x)函数的使用
mysql>SELECT SIGN(-2),SIGN(0),SIGN(2); +----------+---------+----------+ | SIGN(-2) | SIGN(0) | SIGN(2) | +----------+---------+----------+ | -1 | 0 | -1 | +----------+---------+----------+ 1 row in set (0.00 sec)
13.2.7 幂运算POW(x,y)、POWER(x,y)和EXP(X)
【示例13-7】下面将演示POW(x,y)、POWER(x,y)和EXP(X)函数的使用。
mysql>SELECT POW(3,2),POWER(3,2),EXP(2); +----------+------------+----------------+ | POW(3,2) | POWER(3,2) | EXP(2) | +----------+------------+----------------+ | 9 | 9 |7.38935609893065| +----------+------------+----------------+ 1 row in set (0.00 sec)
13.2.8 对数运算函数LOG(x)和LOG10(X)
【示例13-8】下面将演示LOG(x)和LOG10(X)函数的使用。
mysql>SELECT LOG(7.38935609893065),LOG10(100); +-----------------------+------------+ | LOG(7.38935609893065) | LOG10(100) | +-----------------------+------------+ | 2 | 2 | +-----------------------+------------+ 1 row in set (0.00 sec)
13.2.9角度与弧度相互转换的函数RADIANS(x),DEGREES(x)函数的的使用。
【示例13-9】下面将演示RADIANS(x),DEGREES(x)函数的使用。
mysql>SELECT RADIANS(180),DEGREES(3.141592653589793); +-----------------+----------------------------+ | RADIANS(180) | DEGREES(3.141592653589793) | +-----------------+----------------------------+ |3.141592653589793| 180 | +-----------------+----------------------------+ 1 row in set (0.00 sec)
13.2.10 正弦函数SIN(x)和反正弦函数ASIN(x)
【示例13-10】SIN(x)和反正弦函数ASIN(x)函数的使用。
mysql>SELECT SIN(0.5235987755982989),ASIN(0.5); +-------------------------+------------------+ | SIN(0.5235987755982989) | ASIN(0.5) | +-------------------------+------------------+ | 0.5 |0.5235987755982989| +-------------------------+------------------+ 1 row in set (0.00 sec)
13.2.11 余弦函数COS(x)和反余弦函数ACOS(x)
【示例13-11】COS(x)和反正弦函数ACOS(x)函数的使用。
mysql>SELECT COS(1.471975511965979),ACOS(0.5); +-------------------------+------------------+ | COS(1.471975511965979) | ACOS(0.5) | +-------------------------+------------------+ | 0.5 |1.471975511965979 | +-------------------------+------------------+ 1 row in set (0.00 sec)
13.2.12 正切函数、反正切和余切函数
【示例13-11】下面将演示TAN(x),ATAN(x),ATAN2(x)和COT(x).
mysql>SELECT TAN(0.7853981633974483),ATAN(1),ATAN2(1); +-------------------------+------------------+------------------+ | TAN(0.7853981633974483) | ATAN(1) | ATAN2(1) | +-------------------------+------------------+------------------+ |0.99999999999999999999999|0.7853981633974483|0.7853981633974483| +-------------------------+------------------+------------------+ 1 row in set (0.00 sec)
mysql>SELECT COT(1),1/TAN(1); +--------------------+--------------------+ | COT(1)--- | 1/TAN(1) | +--------------------+--------------------+ | 0.6420926159343306 | 0.6420926159343306 | +--------------------+--------------------+ 1 row in set (0.00 sec)