9月29日 数学函数
考试大纲中的数学函数包括6个:ABS()、FLOOR()、RAND()、TRUNCATE()、SQRT() 、ROUND()、CEIL()、MOD() 、POW() 、FORMAT()
函数总结
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() 函数使用要点
基本语法:
ROUND(number, decimals)
number
:要四舍五入的数字decimals
:要保留的小数位数
小数位数参数:
0
:四舍五入到整数1
:保留一位小数2
:保留两位小数以此类推...
与 RAND() 结合的优势:
可以精确控制随机数的精度
适合需要特定小数位数的场景(如金额、评分、坐标等)
比 FLOOR/TRUNCATE 更符合日常四舍五入的习惯
注意事项:
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:生成随机数
生成 [0,5] 的随机整数(含 0 含 5)
生成 [1,8] 的随机整数(含 1 含 8)
生成 [10,20) 的随机整数(含 10 不含20)
生成 [1,100] 的随机整数(含 1 含 100)
掷骰子[1,6] (含 1 含 6)
随机抽奖[100,999] (含 100 含 999)
随机布尔值[0,1] (含 0 含 1)
生成两位的随机整数
生成四位的随机整数
生成两位小数的随机数
生成四位小数的随机数
生成 [0,5] 的随机整数(含 0 含 5)
SELECT FLOOR(RAND() * 6);
生成 [1,8] 的随机整数(含 1 含 8)
SELECT FLOOR(RAND() * 8) + 1;
生成 [10,20) 的随机整数(含 10 不含20)
SELECT FLOOR(RAND() * 10) + 10;
生成 [1,100] 的随机整数(含 1 含 100)
SELECT FLOOR(RAND() * 100) + 1;
掷骰子[1,6] (含 1 含 6)
SELECT FLOOR(RAND() * 6) + 1;
随机抽奖[100,999] (含 100 含 999)
SELECT FLOOR(RAND() * 900) + 100;
随机布尔值[0,1] (含 0 含 1)
SELECT FLOOR(RAND() * 2);
生成两位的随机整数
SELECT FLOOR(RAND() * 90) + 10;
生成四位的随机整数
SELECT FLOOR(RAND() * 9000) + 1000;
10.生成两位小数(如 [0,5]):
SELECT FLOOR(RAND() * 501) / 100; -- [0,5.00]
11.生成四位小数(如 [1,10]):
SELECT FLOOR(RAND() * 90001) / 10000 + 1; -- [1,10.0000]
练习2:基础函数
计算-25的绝对值
生成一个 0 到 1 之间的随机小数
将数字 4.2 向上取整
将数字 4.9 向下取整
将数字 3.14159 保留两位小数并四舍五入
将数字 3.14159 截断为两位小数
计算 2 的 5 次方
计算 81 的平方根
求 17 除以 5 的余数
查询圆周率 PI 的值 : select PI()
随机生成一个 1 到 100 之间的整数
将 -8.7 四舍五入为整数
作业2(基本函数)
计算-25的绝对值
SELECT ABS(-25);
-- 结果: 25
生成一个 0 到 1 之间的随机小数
SELECT RAND();
-- 结果: [0, 1) 之间的随机小数,如 0.123456789
将数字 4.2 向上取整
SELECT CEIL(4.2);
-- 结果: 5
将数字 4.9 向下取整
SELECT FLOOR(4.9);
-- 结果: 4
将数字 3.14159 保留两位小数并四舍五入
SELECT ROUND(3.14159, 2);
-- 结果: 3.14
将数字 3.14159 截断为两位小数
SELECT TRUNCATE(3.14159, 2);
-- 结果: 3.14
计算 2 的 5 次方
SELECT POW(2, 5);
-- 结果: 32
计算 81 的平方根
SELECT SQRT(81);
-- 结果: 9
求 17 除以 5 的余数
SELECT MOD(17, 5);
-- 或者
SELECT 17 % 5;
-- 结果: 2
查询圆周率 PI 的值
SELECT PI();
-- 结果: 3.141593
随机生成一个 1 到 100 之间的整数
SELECT FLOOR(1 + RAND() * 100);
-- 结果: [1, 100] 之间的随机整数
将 -8.7 四舍五入为整数
SELECT ROUND(-8.7);
-- 结果: -9
练习2:随机数
基础随机数生成
-- 生成一个 0 到 1 之间的随机小数(不包含1)
SELECT ______();
指定范围的随机整数
-- 生成 1 到 10 之间的随机整数(包含1和10)
SELECT FLOOR(______ + ______ * ______);
随机布尔值
-- 生成随机布尔值(0 或 1),不使用 ROUND 函数
SELECT ______(RAND() + 0.5);
随机小数范围
-- 生成 5.0 到 15.0 之间的随机小数(包含5.0,不包含15.0)
SELECT ______ + ______ * ______;
随机抽奖号码
-- 生成一个 1000 到 9999 之间的随机整数(4位抽奖号码)
SELECT ______(1000 + ______ * ______);
保留指定位数的随机小数
-- 生成两位小数的随机数(0.00 到 1.00 之间,包含1.00)
SELECT ______(RAND() * 101) / ______;
使用种子的随机数
-- 使用种子值 42 生成可重复的随机数
SELECT ______(42);
随机排序查询结果
-- 从 users 表中随机选择 5 条记录
SELECT * FROM users ______ BY ______() LIMIT 5;
随机百分比
-- 生成 0% 到 100% 的随机百分比(包含0%和100%)
SELECT ______(RAND() * 100) AS random_percent;
随机日期范围
-- 生成 2023-01-01 到 2023-12-31 之间的随机日期
SELECT DATE_ADD('2023-01-01', INTERVAL ______(RAND() * ______) DAY);
练习3:随机数ROUND
生成 1 到 10 之间的随机整数(包含1和10)
2. 生成 0 到 1 之间的随机小数,保留两位小数
2. 生成 5.0 到 15.0 之间的随机小数,保留一位小数
3. 生成 0% 到 100% 的随机百分比,保留整数百分比
4. 生成 0.00 到 100.00 之间的随机金额,保留两位小数
5. 生成 1.0 到 5.0 之间的随机评分,保留一位小数
6. 生成 -10.0 到 35.0 之间的随机温度,保留一位小数
7. 生成经度范围(-180.0 到 180.0)的随机坐标,保留四位小数
8. 生成 0.000 到 1.000 之间的随机权重,保留三位小数
练习3 随机数round答案
基础随机数四舍五入
SELECT ROUND(RAND());
指定范围的随机整数
SELECT ROUND(1 + RAND() * 9);
保留指定位数的随机小数
SELECT ROUND(RAND(), 2);
范围随机小数四舍五入
SELECT ROUND(5.0 + RAND() * 10.0, 1);
随机百分比
SELECT ROUND(RAND() * 100, 0);
随机金额
SELECT ROUND(RAND() * 100, 2);
随机评分
SELECT ROUND(1.0 + RAND() * 4.0, 1);
随机温度
SELECT ROUND(-10.0 + RAND() * 45.0, 1);
随机坐标
SELECT ROUND(-180.0 + RAND() * 360.0, 4);
随机权重
SELECT ROUND(RAND(), 3);
练习1答案
计算-25的绝对值
SELECT ABS(-25);
-- 结果: 25
生成一个 0 到 1 之间的随机小数
SELECT RAND();
-- 结果: [0, 1) 之间的随机小数,如 0.123456789
将数字 4.2 向上取整
SELECT CEIL(4.2);
-- 结果: 5
将数字 4.9 向下取整
SELECT FLOOR(4.9);
-- 结果: 4
将数字 3.14159 保留两位小数并四舍五入
SELECT ROUND(3.14159, 2);
-- 结果: 3.14
将数字 3.14159 截断为两位小数
SELECT TRUNCATE(3.14159, 2);
-- 结果: 3.14
计算 2 的 5 次方
SELECT POW(2, 5);
-- 结果: 32
计算 81 的平方根
SELECT SQRT(81);
-- 结果: 9
求 17 除以 5 的余数
SELECT MOD(17, 5);
-- 或者
SELECT 17 % 5;
-- 结果: 2
查询圆周率 PI 的值
SELECT PI();
-- 结果: 3.141593
随机生成一个 1 到 100 之间的整数
SELECT FLOOR(1 + RAND() * 100);
-- 结果: [1, 100] 之间的随机整数
将 -8.7 四舍五入为整数
SELECT ROUND(-8.7);
-- 结果: -9
练习2答案
基础随机数生成
SELECT RAND();
指定范围的随机整数
SELECT FLOOR(1 + RAND() * 10);
随机布尔值
SELECT FLOOR(RAND() + 0.5);
随机小数范围
SELECT 5.0 + RAND() * 10.0;
随机抽奖号码
SELECT FLOOR(1000 + RAND() * 9000);
保留指定位数的随机小数
SELECT FLOOR(RAND() * 101) / 100;
使用种子的随机数
SELECT RAND(42);
随机排序查询结果
SELECT * FROM users ORDER BY RAND() LIMIT 5;
随机百分比
SELECT FLOOR(RAND() * 100) AS random_percent;
随机日期范围
SELECT DATE_ADD('2023-01-01', INTERVAL FLOOR(RAND() * 365) DAY);