Mysql教程

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)

关注微信获取最新动态