Administrator
发布于 2025-09-28 / 7 阅读
0
0

MySQL第17课:数学函数2

考试大纲中的数学函数包括6个:ABS()、FLOOR()、RAND()、TRUNCATE()、SQRT() 、ROUND()、CEIL()、MOD() 、POW() 、FORMAT()

函数总结

函数

用途

示例

ABS(x)

绝对值

ABS(-5) = 5

RAND()

随机小数 [0,1)

RAND()

CEIL(x)

向上取整

CEIL(4.2) = 5

FLOOR(x)

向下取整

FLOOR(4.9) = 4

ROUND(x, d)

四舍五入到d位小数

ROUND(3.14159, 2) = 3.14

TRUNCATE(x, d)

截断到d位小数

TRUNCATE(3.14159, 2) = 3.14

POW(x, y)

x的y次方

POW(2, 5) = 32

SQRT(x)

平方根

SQRT(81) = 9

MOD(x, y)

求余数

MOD(17, 5) = 2

PI()

圆周率

PI() = 3.141593

ABS()

用途:取绝对值

语法:

ABS(n)

示例

SELECT ABS(-12.5);  -- 输出 12.5  

MOD()

用途:取余数

语法

MOD(n, m)

示例

SELECT MOD(15, 4);  -- 输出 3
SELECT MOD(-15, 4);  -- 输出 -3  

POW()

用途:计算 x 的 y 次幂

语法

POW(x, y)

示例

SELECT POW(2, 3);  -- 输出 8

SQRT()

用途:求平方根

语法

SQRT(x)

注意:x 必须为非负数

示例

SELECT SQRT(9);  -- 输出 3  

CEIL()

用途:向上取整

CEIL(x) / CEILING(x) 

示例

SELECT CEIL(3.1);  -- 返回 4 
SELECT CEIL(-3.1) -- 返回 -3

FLOOR()

用途:向下取整

语法

CEIL(x)

示例

SELECT FLOOR(3.9);  -- 输出 3  

ROUND()

用途:四舍五入到指定小数位

语法

ROUND(x, d)

示例

SELECT ROUND(3.1415, 2);  -- 输出 3.14  
SELECT ROUND(123.456, -1); -- 输出 120(十位取整)

ROUND() 函数使用要点

  1. 基本语法ROUND(number, decimals)

    • number:要四舍五入的数字

    • decimals:要保留的小数位数

  2. 小数位数参数

    • 0:四舍五入到整数

    • 1:保留一位小数

    • 2:保留两位小数

    • 以此类推...

  3. 与 RAND() 结合的优势

    • 可以精确控制随机数的精度

    • 适合需要特定小数位数的场景(如金额、评分、坐标等)

    • 比 FLOOR/TRUNCATE 更符合日常四舍五入的习惯

  4. 注意事项

    • ROUND() 是四舍五入,不是截断

    • 对于边界值要特别注意(如 0.5 会向上舍入)

    • 负数也是按四舍五入规则处理

TRUNCATE()

用途:直接截断小数位。(与 ROUND 不同,不会四舍五入)

语法

TRUNCATE(x, d) 

示例

SELECT TRUNCATE(3.1415, 2);  -- 输出 3.14  

FORMAT()

用途:数字格式化(千分位)

语法

FORMAT(x, d) 

示例

-- 输出 '1,234,567.46'(会四舍五入)
SELECT FORMAT(1234567.456, 2);  

RAND()

用途: 生成 [0~1)之间的随机浮点数。

语法

RAND()

示例:

RAND();

示例:生成一个0 ~ 1之间(不含1)的随机小数

SELECT RAND();

运行结果

+--------------------+
| rand()             |
+--------------------+
| 0.5100285648461698 |
+--------------------+
1 row in set (0.001 sec)

练习1:基础函数

  1. 计算-25的绝对值

  2. 生成一个 0 到 1 之间的随机小数

  3. 将数字 4.2 向上取整

  4. 将数字 4.9 向下取整

  5. 将数字 3.14159 保留两位小数并四舍五入

  6. 将数字 3.14159 截断为两位小数

  7. 计算 2 的 5 次方

  8. 计算 81 的平方根

  9. 求 17 除以 5 的余数

  10. 查询圆周率 PI 的值 : select PI()

  11. 随机生成一个 1 到 100 之间的整数

  12. 将 -8.7 四舍五入为整数


练习2:随机数

  1. 基础随机数生成

-- 生成一个 0 到 1 之间的随机小数(不包含1)
SELECT ______();
  1. 指定范围的随机整数

-- 生成 1 到 10 之间的随机整数(包含1和10)
SELECT FLOOR(______ + ______ * ______);
  1. 随机布尔值

-- 生成随机布尔值(0 或 1),不使用 ROUND 函数
SELECT ______(RAND() + 0.5);
  1. 随机小数范围

-- 生成 5.0 到 15.0 之间的随机小数(包含5.0,不包含15.0)
SELECT ______ + ______ * ______;
  1. 随机抽奖号码

-- 生成一个 1000 到 9999 之间的随机整数(4位抽奖号码)
SELECT ______(1000 + ______ * ______);
  1. 保留指定位数的随机小数

-- 生成两位小数的随机数(0.00 到 1.00 之间,包含1.00)
SELECT ______(RAND() * 101) / ______;
  1. 使用种子的随机数

-- 使用种子值 42 生成可重复的随机数
SELECT ______(42);
  1. 随机排序查询结果

-- 从 users 表中随机选择 5 条记录
SELECT * FROM users ______ BY ______() LIMIT 5;
  1. 随机百分比

-- 生成 0% 到 100% 的随机百分比(包含0%和100%)
SELECT ______(RAND() * 100) AS random_percent;
  1. 随机日期范围

-- 生成 2023-01-01 到 2023-12-31 之间的随机日期
SELECT DATE_ADD('2023-01-01', INTERVAL ______(RAND() * ______) DAY);

练习3:随机数round

  1. 基础随机数四舍五入

-- 生成 0 到 1 之间的随机小数,并四舍五入为整数(0 或 1)
SELECT ______(RAND());
  1. 指定范围的随机整数

-- 生成 1 到 10 之间的随机整数(包含1和10),使用 ROUND
SELECT ______(1 + RAND() * 9);
  1. 保留指定位数的随机小数

-- 生成 0 到 1 之间的随机小数,保留两位小数
SELECT ______(RAND(), 2);
  1. 范围随机小数四舍五入

-- 生成 5.0 到 15.0 之间的随机小数,保留一位小数
SELECT ______(5.0 + RAND() * 10.0, 1);
  1. 随机百分比

-- 生成 0% 到 100% 的随机百分比,保留整数百分比
SELECT ______(RAND() * 100, 0);
  1. 随机金额

-- 生成 0.00 到 100.00 之间的随机金额,保留两位小数
SELECT ______(RAND() * 100, 2);
  1. 随机评分

-- 生成 1.0 到 5.0 之间的随机评分,保留一位小数
SELECT ______(1.0 + RAND() * 4.0, 1);
  1. 随机温度

-- 生成 -10.0 到 35.0 之间的随机温度,保留一位小数
SELECT ______(-10.0 + RAND() * 45.0, 1);
  1. 随机坐标

-- 生成经度范围(-180.0 到 180.0)的随机坐标,保留四位小数
SELECT ______(-180.0 + RAND() * 360.0, 4);
  1. 随机权重

-- 生成 0.000 到 1.000 之间的随机权重,保留三位小数
SELECT ______(RAND(), 3);

练习2答案

  1. 基础随机数生成

SELECT RAND();
  1. 指定范围的随机整数

SELECT FLOOR(1 + RAND() * 10);
  1. 随机布尔值

SELECT FLOOR(RAND() + 0.5);
  1. 随机小数范围

SELECT 5.0 + RAND() * 10.0;
  1. 随机抽奖号码

SELECT FLOOR(1000 + RAND() * 9000);
  1. 保留指定位数的随机小数

SELECT FLOOR(RAND() * 101) / 100;
  1. 使用种子的随机数

SELECT RAND(42);
  1. 随机排序查询结果

SELECT * FROM users ORDER BY RAND() LIMIT 5;
  1. 随机百分比

SELECT FLOOR(RAND() * 100) AS random_percent;
  1. 随机日期范围

SELECT DATE_ADD('2023-01-01', INTERVAL FLOOR(RAND() * 365) DAY);

练习3答案

  1. 基础随机数四舍五入

SELECT ROUND(RAND());
  1. 指定范围的随机整数

SELECT ROUND(1 + RAND() * 9);
  1. 保留指定位数的随机小数

SELECT ROUND(RAND(), 2);
  1. 范围随机小数四舍五入

SELECT ROUND(5.0 + RAND() * 10.0, 1);
  1. 随机百分比

SELECT ROUND(RAND() * 100, 0);
  1. 随机金额

SELECT ROUND(RAND() * 100, 2);
  1. 随机评分

SELECT ROUND(1.0 + RAND() * 4.0, 1);
  1. 随机温度

SELECT ROUND(-10.0 + RAND() * 45.0, 1);
  1. 随机坐标

SELECT ROUND(-180.0 + RAND() * 360.0, 4);
  1. 随机权重

SELECT ROUND(RAND(), 3);


评论