【每日一技】:SQL 常用函数实战速查表(函数 + 场景版)

📌 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 → 业务逻辑表达

相关推荐
远方16092 小时前
110-Oracle中核心业务的年度分区表建立
数据库·oracle·database
__风__2 小时前
PostgreSQL 约束延迟触发
数据库·postgresql
月明长歌2 小时前
MySQL数据库约束:把“能插入”升级成“插入就对”
数据库·mysql·oracle
码农水水2 小时前
京东Java面试被问:系统限流的实现方式
java·开发语言·面试
宁晓3 小时前
单表配置多级类型,按名称模糊筛选
java·后端
Yu_iChan3 小时前
Day03 公共字段填充与菜品管理
java·开发语言
独自破碎E3 小时前
如何防止接口被恶意刷量?
java·开发语言
期待のcode3 小时前
Java的单例模式
java·开发语言·单例模式
·云扬·3 小时前
InnoDB Cluster 常见管理命令
数据库·mysql