MySQL常用数学函数使用指南
在MySQL数据库开发中,处理数值型数据离不开内置的数学函数。本文系统整理了MySQL中常用的数学运算工具,包括绝对值、取余、四舍五入、指数对数及三角函数等,通过实际的SQL查询语句展示各函数的参数要求与返回结果。
基础数值处理函数
在处理具体业务数据时,常需对原始数据进行规范化或符号修正。以下函数可用于基础的数值转换:
第1步:获取绝对值
目的:去除数值的负号,仅保留大小。
函数:ABS(x)
示例:查询数值 1、-1 和 0 的绝对值。
mysql> select ABS(1), ABS(-1), ABS(0);
+--------+---------+--------+
| ABS(1) | ABS(-1) | ABS(0) |
+--------+---------+--------+
| 1 | 1 | 0 |
+--------+---------+--------+
第2步:圆周率常数获取
目的:获取高精度的π值用于后续计算。
函数:PI()
结果:返回 3.141593。
第3步:开平方根
目的:计算非负数的平方根。若传入负数,将返回NULL。
函数:SQRT(x)
注意:SQRT(0) 结果为 0,而 SQRT(-49) 为 NULL。
mysql> select SQRT(49), SQRT(0), SQRT(-49);
+----------+---------+-----------+
| SQRT(49) | SQRT(0) | SQRT(-49) |
+----------+---------+-----------+
| 7 | 0 | NULL |
+----------+---------+-----------+
第4步:符号判断
目的:判断数值的正负状态。
函数:SIGN(x)
规则:返回 -1(负数)、0(零)或 1(正数)。
+-----------+----------+---------+-----------+----------+
| SIGN(-21) | SIGN(-0) | SIGN(0) | SIGN(0.0) | SIGN(21) |
+-----------+----------+---------+-----------+----------+
| -1 | 0 | 0 | 0 | 1 |
+-----------+----------+---------+-----------+----------+
取模与整除相关
在分页逻辑、循环周期或特定比例计算中,取模(Modulus)函数非常关键。
第5步:计算余数
目的:获取两数相除后的精确余数,支持负数及小数运算。
函数:MOD(x,y)
特点:返回除法运算后的精确余数,即使包含小数部分也起作用。
mysql> select MOD(31,8), MOD(21,-8), MOD(-7,2), MOD(-7,-2), MOD(45.5,6);
+-----------+------------+-----------+------------+-------------+
| MOD(31,8) | MOD(21,-8) | MOD(-7,2) | MOD(-7,-2) | MOD(45.5,6) |
+-----------+------------+-----------+------------+-------------+
| 7 | 5 | -1 | -1 | 3.5 |
+-----------+------------+-----------+------------+-------------+
第6步:向上/下取整
目的:处理浮点数转换为整数时的边界情况。
函数:CEIL(X) / CEILING(X)(向上),FLOOR(X)(向下)
- CEIL/CEILING:返回不小于 X 的最小整数值(如 3.35 → 4)。
- FLOOR:返回不大于 X 的最大整数值(如 3.35 → 3)。
mysql> select CEIL(-3.35), CEIL(3.35);
+-------------+------------+
| CEIL(-3.35) | CEIL(3.35) |
+-------------+------------+
| -3 | 4 |
+-------------+------------+
6. CEILING(X): 同CEIL(X)
mysql> select CEILING(-3.35), CEILING(3.35);
+----------------+---------------+
| CEILING(-3.35) | CEILING(3.35) |
+----------------+---------------+
| -3 | 4 |
+----------------+---------------+
7. FLOOR(X):返回不大于X的最大整数值,返回值转为一个BIGINT.
mysql> select FLOOR(-3.35), FLOOR(3.35);
+--------------+-------------+
| FLOOR(-3.35) | FLOOR(3.35) |
+--------------+-------------+
| -4 | 3 |
+--------------+-------------+
近似与截断处理
针对金额、百分比等需要固定精度的场景,ROUND和TRUNCATE提供了不同的处理策略。
第7步:四舍五入 (ROUND)
目的:按指定精度四舍五入数值。
函数:ROUND(X,Y)。Y省略默认为0;Y为正数保留小数位,为负数则对小数点左侧进行舍入。
示例逻辑:
- ROUND(1.14) → 1
- ROUND(1.9) → 2
- ROUND(232.38, -1) → 230
+--------------+-------------+-------------+------------+
| ROUND(-1.14) | ROUND(-1.9) | ROUND(1.14) | ROUND(1.9) |
+--------------+-------------+-------------+------------+
第8步:直接截取 (TRUNCATE)
目的:丢弃指定位数后的数字,不做四舍五入。
函数:TRUNCATE(X,Y)
对比:若Y=1,TRUNCATE(1.33, 1) 结果为 1.3,而 ROUND(1.33, 1) 结果为 1.3;但 TRUNCATE(1.99, 1) 结果为 1.9,不会进位。
mysql> select TRUNCATE(1.33,1), TRUNCATE(1.99,1), TRUNCATE(1.99,0), TRUNCATE(19.99,-1);
+------------------+------------------+------------------+--------------------+
| TRUNCATE(1.33,1) | TRUNCATE(1.99,1) | TRUNCATE(1.99,0) | TRUNCATE(19.99,-1) |
+------------------+------------------+------------------+--------------------+
| 1.3 | 1.9 | 1 | 10 |
+------------------+------------------+------------------+--------------------+
随机数与幂运算
第9步:生成随机数
目的:生成 0 到 1 之间的浮点数。
RAND():每次执行返回不同结果。RAND(X):X为种子值。相同X产生相同序列,常用于复现随机数据。
mysql> select RAND(10), RAND(10), RAND(2), RAND(-2);
+--------------------+--------------------+--------------------+--------------------+
| RAND(10) | RAND(10) | RAND(2) | RAND(-2) |
+--------------------+--------------------+--------------------+--------------------+
| 0.6570515219653505 | 0.6570515219653505 | 0.6555866465490187 | 0.6548542125661431 |
+--------------------+--------------------+--------------------+--------------------+
第10步:乘方与指数
目的:计算底数的N次幂或e的N次方。
POW(X,Y)/POWER(X,Y):X的Y次幂。例如POW(2, -2)结果为 0.25。EXP(X):自然常数 e 的 X 次幂。例如EXP(0)结果为 1。
第11步:对数运算
注意:LOG函数仅接受正数输入,负数或0将返回NULL。
LOG(X):自然对数(以e为底)。LOG10(X):以10为底的对数。
mysql> select LOG(-3), LOG(0), LOG(3), LOG10(-100), LOG10(0), LOG10(100);
+---------+--------+--------------------+-------------+----------+------------+
| LOG(-3) | LOG(0) | LOG(3) | LOG10(-100) | LOG10(0) | LOG10(100) |
+---------+--------+--------------------+-------------+----------+------------+
| NULL | NULL | 1.0986122886681098 | NULL | NULL | 2 |
+---------+--------+--------------------+-------------+----------+------------+
角度与弧度转换及三角函数
第12步:单位转换
目的:在角度制与弧度制之间切换。
RADIANS(X):角度转弧度。DEGREES(X):弧度转角度。
mysql> select RADIANS(90), RADIANS(180), DEGREES(PI()), DEGREES(PI()/2);
+--------------------+-------------------+---------------+-----------------+
| RADIANS(90) | RADIANS(180) | DEGREES(PI()) | DEGREES(PI()/2) |
+--------------------+-------------------+---------------+-----------------+
| 1.5707963267948966 | 3.141592653589793 | 180 | 90 |
+--------------------+-------------------+---------------+-----------------+
第13步:三角函数计算
说明:正弦(SIN)、余弦(COS)、正切(TAN)及其反函数(ASIN, ACOS, ATAN)均以**弧度**作为输入参数。余切(COT)为正切的倒数。
限制条件:反三角函数 ASIN 和 ACOS 的输入值必须介于 -1 到 1 之间,否则可能产生错误或返回NULL。
mysql> select SIGN(PI()/2),ASIN(1),COS(PI()), ACOS(-1), TAN(PI()/4), ATAN(1), COT(0.5);
+--------------+--------------------+-----------+-------------------+--------------------+--------------------+-------------------+
| SIGN(PI()/2) | ASIN(1) | COS(PI()) | ACOS(-1) | TAN(PI()/4) | ATAN(1) | COT(0.5) |
+--------------+--------------------+-----------+-------------------+--------------------+--------------------+-------------------+
| 1 | 1.5707963267948966 | -1 | 3.141592653589793 | 0.9999999999999999 | 0.7853981633974483 | 1.830487721712452 |
+--------------+--------------------+-----------+-------------------+--------------------+--------------------+-------------------+
以上就是MySQL数学函数简明总结的详细内容,更多关于MySQL数据处理技巧的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









