一、数学函数是什么
为了解决数据库使用过程中遇到的数学问题,mysql提供了大量的数学函数,今天我们重点学习其中的四个:
FLOOR() : (地板函数)向下取整
CEIL(): (天花板函数) 向上取整
ROUND(): 求绝对值
RAND(): 随机数函数
二、FLOOR()
用途:向下取整(地板函数)
作用: FLOOR(x)
会把数字 向下取整,也就是说,它返回不大于 x 的最大整数。
语法:
SELECT FLOOR(数字);
示例:
SELECT FLOOR(12.9); -- 结果:12
SELECT FLOOR(-3.2); -- 结果:-4
解释:
12.9
向下取整后是12
对于负数,向下取整是“更小”的数,所以
-3.2
向下取整是-4
三、CEIL()
用途:向上取整(天花板函数)
作用: CEIL(x)
(或写作 CEILING(x)
)会把数字 向上取整,也就是返回不小于 x 的最小整数。
语法:
SELECT CEIL(数字);
示例:
SELECT CEIL(12.1); -- 结果:13
SELECT CEIL(-3.7); -- 结果:-3
解释:
12.1
向上取整后是13
对负数来说,向上取整会“靠近零”,所以
-3.7
向上取整后是-3
四、ROUND()
用途:四舍五入取整
作用: ROUND(x, d)
用于对数字 四舍五入。
x
是要处理的数字d
是保留的小数位数(可省略)
语法:
SELECT ROUND(数字 [, 保留小数位数]);
示例:
SELECT ROUND(12.56); -- 结果:13
SELECT ROUND(12.56, 1); -- 结果:12.6
SELECT ROUND(-3.75, 1); -- 结果:-3.8
解释:
ROUND(12.56)
默认保留 0 位小数,结果是13
ROUND(12.56, 1)
表示保留 1 位小数,结果是12.6
小提示:
ROUND()
是“四舍五入”,不是取整。
五、RAND()
用途:—— 生成随机数
作用: RAND()
会返回一个 0 到 1 之间的随机小数(不含 1)。
语法:
SELECT RAND();
示例:
SELECT RAND(); -- 可能结果:0.726394
SELECT RAND()*10; -- 生成 0~10 之间的随机小数
SELECT FLOOR(RAND()*10); -- 生成 0~9 的随机整数
示例1: 生成[0,1)之间的小数 0 1
SELECT RAND();
示例2: 生成[0,10)之间的小数 0 10
SELECT RAND() * 10;
示例3: 生成[0,9)之间的小数 0 0
SELECT RAND() * 9;
示例4: 生成[1,11)之间的小数 1 11
SELECT 1 + RAND() * 10; (1 - 11)
示例5: 生成[1,10)之间的小数 1 11
SELECT 1 + RAND() * (10 - 1); (1 - 10)
示例6: 生成[1,10]之间的小数 1 11
SELECT 1 + RAND() * (10 - 1 + 1); (1 - 10)
示例7: 生成[4,12]之间的小数
SELECT 4 + RAND() * (12 - 4 + 1);
生成[a,b]之间的随机小数的公式
SELECT a + RAND() * (b - a + 1);
生成[a,b]之间的随机整数的公式
SELECT FLOOR(a + RAND() * (b - a + 1));
示例8: 生成[4,12]之间的整数
SELECT FLOOR(4 + RAND() * (12 - 4 + 1));
六、总结
练习题
作业1(随机数)
查询 12.7 的向下取整结果。
查询 -3.2 的向下取整结果。
计算商品价格 59.99 向下取整后的整数价格。
查询表达式 (10.8 + 2.3) 的向下取整结果。
查询 3.1 的向上取整结果。
查询 -4.9 的向上取整结果。
将商品价格 19.01 向上取整,显示为整数价。
查询 (7.2 + 5.9) 的向上取整结果。
将 12.56 四舍五入为整数。
将 12.56 四舍五入保留 1位小数。
将 -3.75 四舍五入保留 1位小数。
查询下列价格 price 四舍五入保留两位小数。
计算表达式 (5.67 + 8.33) 的四舍五入结果,保留1位小数。
生成一个 0~1 之间的随机数。
生成一个 0~10 之间的随机小数。
生成一个 1~100 之间的随机整数。
生成 [0,5] 的随机整数(含 0 含 5)
生成 [1,8] 的随机整数(含 1 含 8)
生成 [10,20) 的随机整数(含 10 不含20)
生成5个 0~9 之间的随机整数(使用 RAND() 结合 FLOOR())。
生成 [1,100] 的随机整数(含 1 含 100)
掷骰子[1,6] (含 1 含 6)
随机抽奖[100,999] (含 100 含 999)
随机布尔值[0,1] (含 0 含 1)
生成两位的随机整数
生成四位的随机整数
生成两位小数的随机数
生成四位小数的随机数
练习题答案
以下是这些 MySQL 题目的答案:
-- 1. 查询 12.7 的向下取整结果
SELECT FLOOR(12.7); -- 结果: 12
-- 2. 查询 -3.2 的向下取整结果
SELECT FLOOR(-3.2); -- 结果: -4
-- 3. 计算商品价格 59.99 向下取整后的整数价格
SELECT FLOOR(59.99); -- 结果: 59
-- 4. 查询表达式 (10.8 + 2.3) 的向下取整结果
SELECT FLOOR(10.8 + 2.3); -- 结果: 13
-- 5. 查询 3.1 的向上取整结果
SELECT CEIL(3.1); -- 结果: 4
-- 6. 查询 -4.9 的向上取整结果
SELECT CEIL(-4.9); -- 结果: -4
-- 7. 将商品价格 19.01 向上取整,显示为整数价
SELECT CEIL(19.01); -- 结果: 20
-- 8. 查询 (7.2 + 5.9) 的向上取整结果
SELECT CEIL(7.2 + 5.9); -- 结果: 14
-- 9. 将 12.56 四舍五入为整数
SELECT ROUND(12.56); -- 结果: 13
-- 10. 将 12.56 四舍五入保留 1位小数
SELECT ROUND(12.56, 1); -- 结果: 12.6
-- 11. 将 -3.75 四舍五入保留 1位小数
SELECT ROUND(-3.75, 1); -- 结果: -3.8
-- 12. 查询下列价格 price 四舍五入保留两位小数
-- 假设有表 products 和字段 price
-- SELECT ROUND(price, 2) FROM products;
-- 13. 计算表达式 (5.67 + 8.33) 的四舍五入结果,保留1位小数
SELECT ROUND(5.67 + 8.33, 1); -- 结果: 14.0
-- 14. 生成一个 0~1 之间的随机数
SELECT RAND(); -- 结果: 0~1之间的随机小数
-- 15. 生成一个 0~10 之间的随机小数
SELECT RAND() * 10; -- 结果: 0~10之间的随机小数
-- 16. 生成一个 1~100 之间的随机整数
SELECT FLOOR(1 + RAND() * 100); -- 结果: 1~100之间的随机整数
-- 17. 生成 [0,5] 的随机整数(含 0 含 5)
SELECT FLOOR(RAND() * 6); -- 结果: 0~5之间的随机整数
-- 18. 生成 [1,8] 的随机整数(含 1 含 8)
SELECT FLOOR(1 + RAND() * 8); -- 结果: 1~8之间的随机整数
-- 19. 生成 [10,20) 的随机整数(含 10 不含20)
SELECT FLOOR(10 + RAND() * 10); -- 结果: 10~19之间的随机整数
-- 20. 生成5个 0~9 之间的随机整数
SELECT FLOOR(RAND() * 10) AS random_num1,
FLOOR(RAND() * 10) AS random_num2,
FLOOR(RAND() * 10) AS random_num3,
FLOOR(RAND() * 10) AS random_num4,
FLOOR(RAND() * 10) AS random_num5;
-- 21. 生成 [1,100] 的随机整数(含 1 含 100)
SELECT FLOOR(1 + RAND() * 100); -- 结果: 1~100之间的随机整数
-- 22. 掷骰子[1,6] (含 1 含 6)
SELECT FLOOR(1 + RAND() * 6); -- 结果: 1~6之间的随机整数
-- 23. 随机抽奖[100,999] (含 100 含 999)
SELECT FLOOR(100 + RAND() * 900); -- 结果: 100~999之间的随机整数
-- 24. 随机布尔值[0,1] (含 0 含 1)
SELECT FLOOR(RAND() * 2); -- 结果: 0或1
-- 25. 生成两位的随机整数
SELECT FLOOR(10 + RAND() * 90); -- 结果: 10~99之间的随机整数
-- 26. 生成四位的随机整数
SELECT FLOOR(1000 + RAND() * 9000); -- 结果: 1000~9999之间的随机整数
-- 27. 生成两位小数的随机数
SELECT ROUND(RAND() * 100, 2); -- 结果: 0.00~100.00之间的随机数(两位小数)
-- 28. 生成四位小数的随机数
SELECT ROUND(RAND() * 100, 4); -- 结果: 0.0000~100.0000之间的随机数(四位小数)