📌 SQL 常用函数实战速查表(函数 + 场景版)
不会函数 ≈ SQL 只能写 30% 的能力 这张表,覆盖你工作中 80% 会用到的 SQL 函数
🧱 一、聚合 & 行级比较
✅ 多列取最大值(行内)
SELECT MAX(val) AS max_val
FROM (
SELECT GREATEST(
level1, level2, level3, level4, level5,
level6, level7, level8, level9, level10
) AS val
FROM table_name
) t;
📌 核心理解:
-
GREATEST():行内多列比较 -
MAX():列级聚合
👉 常见于:等级评定、最大得分、最高权限判断等场景
使用场景:
-
等级评定
-
多指标取最高分
-
多权限取最大值
🔤 二、字符串函数(高频)
1️⃣ 字符串拼接
SELECT CONCAT('作者', '-', 'Sheenky') AS 作者信息;
📌 常用于:报表字段、展示字段
2️⃣ 大小写转换
SELECT UPPER('sheenky') AS 大写;
SELECT LOWER('SHEENKY') AS 小写
📌 常用于: 用户名、编码统一格式
3️⃣ 字符串截取:SUBSTR
SELECT SUBSTR('学SQL就关注博主sheenky', 2, 8) AS output;
从第 2 个字符开始,截取 8 个字符
📌 常用于: 手机号、身份证、编码拆分
4️⃣ 子串位置查找:INSTR
SELECT INSTR('学SQL就关注博主sheenky', '关注') AS 第一次出现位置;
📌 常用于: 关键词定位、内容校验
5️⃣ 去除空格:TRIM
SELECT TRIM(' 学SQL就 关注博主 sheenky ') AS 空格去除;
⚠️ 特别适合清洗脏数据、导入数据前处理
📌 常用于: 清洗脏数据(极其常见)
6️⃣ 左 / 右补齐:LPAD / RPAD
SELECT LPAD('编程秃头', 10, 'tu') AS output;
SELECT RPAD('编程秃头', 10, 'tu') AS output;
📌 常用于:编号补位、对齐展示
7️⃣ 字符串替换:REPLACE
SELECT REPLACE(name, '符兴', '符强') AS 替换之后
FROM tb_teacher;
📌 常用于: 批量修正文本数据
🔢 三、数值计算函数
1️⃣ 四舍五入
SELECT ROUND(1.595658, 3) AS output;
⚠️ 负数四舍五入规则: 先去符号 → 四舍五入 → 再加符号
📌 常用于: 财务、评分、比例
2️⃣ 向上 / 向下取整
SELECT CEIL(1.9);
SELECT FLOOR(1.99);
| 函数 | 含义 |
|---|---|
| CEIL | 向上取整 |
| FLOOR | 向下取整 |
3️⃣ 截断(不四舍五入):TRUNCATE
SELECT TRUNCATE(314159.2673525, 5);
SELECT TRUNCATE(314159.2673525, 0);
SELECT TRUNCATE(314159.2673525, -4);
📌 和 ROUND 最大区别 :❌ 不四舍五入,直接砍掉,直接砍,不进位
4️⃣ 取余 / 幂运算
SELECT MOD(10, 3);
SELECT POW(5, 2);
📌 分组、周期判断、指数计算
⏰ 四、日期与时间函数
1️⃣ 当前时间
SELECT NOW(); -- 当前日期+时间
SELECT CURDATE(); -- 当前日期
SELECT CURTIME(); -- 当前时间
2️⃣ 时间加减:DATE_ADD
SELECT DATE_ADD(NOW(), INTERVAL 1 YEAR);
SELECT DATE_ADD(NOW(), INTERVAL 1 MONTH);
SELECT DATE_ADD(NOW(), INTERVAL 1 DAY);
📌 到期时间、计划时间
3️⃣ 周 / 季度 / 月末
SELECT WEEKOFYEAR(NOW());
SELECT QUARTER(NOW());
SELECT LAST_DAY(NOW());
📌 报表统计高频函数
4️⃣ 时间差计算
SELECT DATEDIFF(CURDATE(), '1992-01-21');
📌 天数差(最常用)
5️⃣ 精确时间差(推荐)
SELECT TIMESTAMPDIFF(YEAR, '1992-01-21', CURDATE());
支持单位:
YEAR | MONTH | DAY | HOUR | MINUTE | SECOND | WEEK | QUARTER
🧠 五、条件判断(SQL 的"分水岭")
1️⃣ IF 判断
SELECT score,
IF(score < 60, '不及格', '及格') AS remark
FROM table_name;
📌 简单条件判断
2️⃣ 空值处理
SELECT IFNULL(NULL, 1);
📌 防止 NULL 影响计算
3️⃣ CASE WHEN(核心)
✅ 离散值映射
CASE pay_type
WHEN 1 THEN '微信'
WHEN 2 THEN '支付宝'
ELSE '其他'
END
✅ 区间映射
CASE
WHEN YEAR(birthday) BETWEEN 1980 AND 1989 THEN '80后'
WHEN YEAR(birthday) BETWEEN 1990 AND 1999 THEN '90后'
ELSE '其他'
END
✅ 条件聚合(报表必会)
SELECT MONTH(order_date) AS month,
SUM(CASE WHEN pay_type IN (1,3,5) THEN pay_amt END) AS wechat,
SUM(CASE WHEN pay_type IN (2,4) THEN pay_amt END) AS alipay
FROM orders
GROUP BY MONTH(order_date);
📌 BI / 数据分析 / 运营报表核心写法
🎯 一句话总结
SQL 函数不是背的,是"场景驱动"的
-
字符串 → 清洗 & 展示
-
数值 → 计算 & 规则
-
日期 → 时间轴 & 报表
-
CASE → 业务逻辑表达