工位上经常有刚入行的新手程序员凑过来问我:哥,MySQL 里处理数字的数学函数一大堆,我做数据统计、算金额、批量造测试数据的时候,到底该学哪几个?不想死记冷门语法,就想学最实用、天天能用的干货刚需内容!
我每次都跟他们说,真不用贪多,日常开发里 80% 和数字打交道的场景,翻来覆去就靠四个核心函数:绝对值、取整、四舍五入、随机数。不管是算差值、规整小数、处理金额,还是做随机抽样、打乱数据,全离不开它们。
今天我还是用大白话来讲,不讲虚的理论知识,所有 SQL 代码复制就能直接运行,同时把新手最容易踩的坑一一点明。
一、绝对值 ABS()
这个函数很好理解,字面意思就是把数字转换成绝对值,负数变正数,正数和数字0保持原样。平时计算数据差值、统计正负金额、对比数值偏差,用得特别多。
核心语法
ABS(数字 / 字段名)实操案例
-- 分别测试正数、负数、0SELECT ABS(10) AS 正数结果, ABS(-15.6) AS 负数结果, ABS(0) AS 零值结果;运行结果:正数结果=10,负数结果=15.6,零值结果=0
新手避坑
二、取整函数 FLOOR()、CEIL()
遇到带小数的数字,需要直接抹掉小数部分,就要用到取整函数。MySQL里最常用的是向下取整和向上取整,这两个功能完全不同,也是新人最容易混淆的点。
1. 向下取整 FLOOR()
规则:不管小数部分是几,一律向更小的整数靠拢,直接舍弃小数。
语法 & 案例
SELECT FLOOR(3.14) AS 正数取整, FLOOR(5.99) AS 正数取整2, FLOOR(-2.3) AS 负数取整;运行结果:3 、5 、-3
2. 向上取整 CEIL() / CEILING()
CEIL()和 CEILING() 功能完全一致,任选其一使用即可。规则:不管小数部分是几,一律向更大的整数靠拢,直接进一位。
语法 & 案例
SELECT CEIL(3.14) AS 正数取整, CEIL(5.99) AS 正数取整2, CEIL(-2.3) AS 负数取整;运行结果:4 、6 、-2
新手避坑
三、四舍五入 ROUND()
这是业务开发里的“明星函数”,算商品价格、统计报表金额、统一小数位数,基本都靠它。它会按照我们数学里的四舍五入规则取舍,还能自由指定保留几位小数。
核心语法
ROUND(数字 / 字段名, 保留小数位数)补充:省略第二个参数时,默认保留0位小数,也就是直接四舍五入取整。
实操案例
-- 1. 省略位数,默认四舍五入取整SELECT ROUND(6.28) AS 取整结果; -- 输出:6-- 2. 指定保留2位小数(常用场景:金额计算)SELECT ROUND(99.876, 2) AS 保留两位小数; -- 输出:99.88-- 3. 保留0位,等价于直接取整SELECT ROUND(12.54, 0) AS 手动取整; -- 输出:13新手避坑
ROUND,避免出现计算异常;四、随机数 RAND()
做测试数据、随机抽奖、数据表随机抽样、打乱展示顺序,都会用到随机数函数RAND(),灵活搭配取整函数,还能生成指定范围的随机整数,实用性拉满。
核心语法
-- 无参数:每次运行生成 0 ≤ 随机数 < 1 的小数RAND()-- 带参数 RAND(数字):设置随机种子,多次运行结果固定(极少用)RAND(固定数值)实操案例
-- 1. 基础用法:生成0~1之间的随机小数SELECT RAND() AS 随机小数;-- 2. 实战高频:生成 1~100 之间的随机整数-- 公式:FLOOR(最小值 + RAND() * (最大值 - 最小值 + 1))SELECT FLOOR(1 + RAND() * 100) AS 1到100随机整数;-- 3. 业务场景:数据表随机排序(日常抽样、随机展示)-- 示例:用户表随机取出10条数据-- SELECT * FROM user ORDER BY RAND() LIMIT 10;新手避坑
RAND()每次执行结果都不一样,带固定种子RAND(5),反复运行结果不会变化;ORDER BY RAND() 排序,执行效率会很低,小表使用完全没问题。五、函数总结(新手速记)
梳理一下四个核心函数的用法和适用场景,记牢这些就足以应对绝大多数数值处理需求:
做开发从来不是学得越多越好,把这些基础函数吃透、把坑避开,写SQL处理数字数据时就会得心应手。踏踏实实打磨基础,远比盲目去记各种冷门函数要靠谱得多。
夜雨聆风