你可以把它理解成:**MySQL 提前帮你写好的 "小工具"**你直接调用,就能快速完成:
- 字符串处理
- 数字计算
- 日期处理
- 统计计算
- 判空、转换...
不用自己写复杂逻辑,直接用函数 = 一行搞定。
二、MySQL 函数分 5 大类(必背)
1. 字符串函数(处理文字)
sql
UPPER('abc') → 转大写 ABC
LOWER('ABC') → 转小写 abc
LENGTH('你好') → 长度(字节)
CONCAT('a','b') → 拼接字符串 → ab
SUBSTR('abcde',1,3) → 截取前3个字符 → abc
TRIM(' abc ') → 去掉两边空格
IFNULL(name,'未知') → 如果name为null,显示"未知"
2. 数值函数(处理数字)
CEIL(1.1) → 向上取整 2
FLOOR(1.9) → 向下取整 1
ROUND(1.234,2) → 四舍五入保留2位 → 1.23
ABS(-10) → 绝对值 → 10
MOD(10,3) → 取余 → 1
RAND() → 随机数 0~1
3. 日期函数(处理时间)

NOW() → 当前时间 2026-04-06 10:55:00
CURDATE() → 当前日期 2026-04-06
YEAR(NOW()) → 取年份 → 2026
MONTH(NOW()) → 取月份 → 4
DAY(NOW()) → 取日期 → 6
DATE_FORMAT(日期,'%Y-%m-%d') → 格式化日期
4. 流程函数(判断逻辑)
① IF (条件,成立值,不成立值)
sql
IF(age>18,'成年','未成年')
② CASE WHEN(多条件判断)
搜索式 CASE(CASE WHEN)
例子1:
CASE
WHEN age<18 THEN '少年'
WHEN age<30 THEN '青年'
ELSE '中年'
END
例子2:
SELECT
id,
name,
CASE
WHEN math >= 85 THEN '优秀'
WHEN math >= 60 THEN '及格'
ELSE '不及格'
END AS math_level,
CASE
WHEN english >= 85 THEN '优秀'
WHEN english >= 60 THEN '及格'
ELSE '不及格'
END AS english_level,
CASE
WHEN chinese >= 85 THEN '优秀'
WHEN chinese >= 60 THEN '及格'
ELSE '不及格'
END AS chinese_level
FROM score;
例子3:
CASE
WHEN workaddress = '北京' OR workaddress = '上海' THEN '一线城市'
ELSE '二线城市'
END
✅ 语法规则:
CASE后面不能跟字段名- 后面的
WHEN可以写任意条件表达式(>、<、>=、AND、OR 等) - 逻辑:从上到下判断条件,第一个满足的就返回对应结果
简单式 CASE
例子1:
例子2:
CASE workaddress
WHEN '北京' THEN '一线城市'
WHEN '上海' THEN '一线城市'
ELSE '二线城市'
END
✅ 语法规则:
CASE后面必须跟字段名 (workaddress)- 后面的
WHEN只能写固定值 / 常量(不能写表达式) - 逻辑:把字段值和
WHEN的值做等值匹配,相等就返回对应结果
两种写法的适用场景(一眼分清)
表格
| 语法类型 | 写法 | 适用场景 | 例子 |
|---|---|---|---|
| 简单式 CASE | CASE 字段 WHEN 常量 THEN ... |
等值匹配(等于某个值) | 按城市分类、按性别分类 |
| 搜索式 CASE | CASE WHEN 表达式 THEN ... |
范围 / 多条件判断(>、<、区间、组合条件) | 按分数分等级、按年龄分阶段 |
③ IFNULL (值,替换值)
sql
IFNULL(workaddress,'地址未知')
-
IF(value, t, f):如果 value 为真,返回 t,否则返回 f。- 例子 :
SELECT name, IF(age > 30, '老将', '新人') FROM emp;
- 例子 :
-
IFNULL(value1, value2):如果第一个值是NULL,就返回第二个值。- 实战 :你的
workaddress有些是NULL,我们可以把它显示为"待定":SELECT name, IFNULL(workaddress, '待定') FROM emp;
- 实战 :你的
5. 聚合函数(分组统计)
COUNT(*) → 统计总条数
SUM(age) → 求和
AVG(age) → 平均值
MAX(age) → 最大值
MIN(age) → 最小值
6.总结

