MySQL提供了丰富的数值运算符和函数,能够满足各类数值计算需求,无论是简单的加减乘除,还是复杂的数学运算,都可以通过内置的运算符和函数快速实现。这些功能在数据统计、字段计算、条件筛选等场景中都十分实用。
常用数值运算符
MySQL的数值运算符和其他编程语言的运算符逻辑基本一致,常见的有以下几种:
- 加法运算符+:用于两个数值相加
- 减法运算符-:用于两个数值相减
- 乘法运算符*:用于两个数值相乘
- 除法运算符/:用于两个数值相除,结果为浮点数
- 取模运算符%:用于计算两个数值相除的余数
- 取负运算符-:用于将数值取相反数
下面通过实际查询示例展示这些运算符的使用效果,假设我们有一个测试表test_num,里面有一个val字段,存储了数值10:
-- 查询各种运算符的计算结果
SELECT
10 + 5 AS add_result,
10 - 5 AS sub_result,
10 * 5 AS mul_result,
10 / 5 AS div_result,
10 % 3 AS mod_result,
-10 AS neg_result;
上述查询会返回对应的计算结果,分别是15、5、50、2.0000、1、-10。
常用数值函数
除了基础运算符,MySQL还提供了大量内置数值函数,覆盖更复杂的数学计算场景:
取整相关函数
CEIL(x)或CEILING(x):返回大于等于x的最小整数FLOOR(x):返回小于等于x的最大整数ROUND(x, d):对x进行四舍五入,d表示保留的小数位数,默认d为0TRUNCATE(x, d):直接截断x到d位小数,不进行四舍五入
SELECT
CEIL(3.2) AS ceil_result,
FLOOR(3.8) AS floor_result,
ROUND(3.567, 2) AS round_result,
TRUNCATE(3.567, 2) AS truncate_result;
上述查询结果为4、3、3.57、3.56。
绝对值与幂运算函数
ABS(x):返回x的绝对值POW(x, y)或POWER(x, y):返回x的y次方SQRT(x):返回x的平方根,x不能为负数
SELECT
ABS(-10) AS abs_result,
POW(2, 3) AS pow_result,
SQRT(16) AS sqrt_result;
结果为10、8、4。
随机数与最值函数
RAND():返回0到1之间的随机浮点数,可传入种子值让随机数固定GREATEST(x1, x2, ...):返回所有参数中的最大值LEAST(x1, x2, ...):返回所有参数中的最小值
SELECT
RAND() AS rand_result,
GREATEST(1, 5, 3, 9) AS max_result,
LEAST(1, 5, 3, 9) AS min_result;
RAND()的结果每次查询会变化,最大值结果为9,最小值结果为1。
实际应用场景示例
假设我们有一个商品表product,字段包括price(原价)、discount(折扣,0到1之间),需要计算商品的折后价,同时筛选出折后价大于50的商品:
-- 计算折后价并筛选
SELECT
id,
price,
discount,
ROUND(price * discount, 2) AS final_price
FROM product
WHERE price * discount > 50;
这里用到了乘法运算符计算折后价,用ROUND函数保留两位小数,同时通过运算符计算的结果作为筛选条件,满足实际业务需求。
注意事项
- 除法运算中如果除数为0,MySQL会返回NULL,不会报错,需要注意规避除数为0的情况
- 取模运算的结果符号和被除数一致,比如
-10 % 3的结果是-1,10 % -3的结果是1 - 函数参数如果不符合要求,比如
SQRT传入负数,会返回NULL
在使用数值运算符和函数时,建议先通过简单查询测试逻辑,再应用到复杂的业务查询中,避免出现计算错误。