Administrator
发布于 2025-09-27 / 11 阅读
0
0

MySQL第18课:数学函数(一)

一、数学函数是什么

为了解决数据库使用过程中遇到的数学问题,mysql提供了大量的数学函数,今天我们重点学习其中的四个:

  1. FLOOR() : (地板函数)向下取整

  2. CEIL(): (天花板函数) 向上取整

  3. ROUND(): 求绝对值

  4. 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));  

六、总结

函数名

功能说明

示例

结果

FLOOR(12.9)

向下取整

FLOOR(12.9)

12

CEIL(12.1)

向上取整

CEIL(12.1)

13

ROUND(12.56, 1)

四舍五入保留1位小数

ROUND(12.56,1)

12.6

RAND()

生成 0~1 之间随机数

RAND()

0.726394


练习题

作业1(随机数)

  1. 查询 12.7 的向下取整结果。

  2. 查询 -3.2 的向下取整结果。

  3. 计算商品价格 59.99 向下取整后的整数价格。

  4. 查询表达式 (10.8 + 2.3) 的向下取整结果。

  5. 查询 3.1 的向上取整结果。

  6. 查询 -4.9 的向上取整结果。

  7. 将商品价格 19.01 向上取整,显示为整数价。

  8. 查询 (7.2 + 5.9) 的向上取整结果。

  9. 将 12.56 四舍五入为整数。

  10. 将 12.56 四舍五入保留 1位小数。

  11. 将 -3.75 四舍五入保留 1位小数。

  12. 查询下列价格 price 四舍五入保留两位小数。

  13. 计算表达式 (5.67 + 8.33) 的四舍五入结果,保留1位小数。

  14. 生成一个 0~1 之间的随机数。

  15. 生成一个 0~10 之间的随机小数。

  16. 生成一个 1~100 之间的随机整数。

  17. 生成 [0,5] 的随机整数(含 0 含 5)

  18. 生成 [1,8] 的随机整数(含 1 含 8)

  19. 生成 [10,20) 的随机整数(含 10 不含20)

  20. 生成5个 0~9 之间的随机整数(使用 RAND() 结合 FLOOR())。

  21. 生成 [1,100] 的随机整数(含 1 含 100)

  22. 掷骰子[1,6] (含 1 含 6)

  23. 随机抽奖[100,999] (含 100 含 999)

  24. 随机布尔值[0,1] (含 0 含 1)

  25. 生成两位的随机整数

  26. 生成四位的随机整数

  27. 生成两位小数的随机数

  28. 生成四位小数的随机数

练习题答案

以下是这些 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之间的随机数(四位小数)


评论