【MySQL 零基础入门】MySQL 函数精讲(二):日期函数与流程控制函数篇

在上一篇中,我们学习了字符串和数值函数,今天继续讲解 日期函数流程控制函数 ------ 日期函数用于处理时间相关数据(如计算入学天数、提取年月),流程控制函数则能实现 SQL 中的 "条件判断",让数据处理更灵活。所有案例仍基于 sicheng 数据库的 student 表。


目录

一、日期函数:处理时间数据的核心工具

[1. 常用日期函数汇总](#1. 常用日期函数汇总)

[2. 实战案例(基于学生表)](#2. 实战案例(基于学生表))

[3. 日期函数易错点](#3. 日期函数易错点)

[二、流程控制函数:SQL 中的 "条件判断"](#二、流程控制函数:SQL 中的 “条件判断”)

[1. 常用流程控制函数汇总](#1. 常用流程控制函数汇总)

[(1)IF 函数:简单条件判断](#(1)IF 函数:简单条件判断)

[(2)IFNULL 函数:空值处理](#(2)IFNULL 函数:空值处理)

[(3)CASE 函数:多条件分支](#(3)CASE 函数:多条件分支)

[写法 1:值匹配(类似 switch)](#写法 1:值匹配(类似 switch))

[写法 2:条件匹配(类似 if-else if)](#写法 2:条件匹配(类似 if-else if))

[2. 流程控制函数实战案例](#2. 流程控制函数实战案例)

[3. 流程控制函数易错点](#3. 流程控制函数易错点)

[三、MySQL 函数整体总结](#三、MySQL 函数整体总结)

[四、预告:MySQL 约束与多表查询](#四、预告:MySQL 约束与多表查询)


一、日期函数:处理时间数据的核心工具

MySQL 中的日期函数可用于获取当前时间、计算日期差、增减时间间隔等,常用在统计报表、时效判断等场景。

1. 常用日期函数汇总

函数 功能 语法示例 结果(示例)
CURDATE() / CURRENT_DATE() 获取当前日期(YYYY-MM-DD) CURDATE() 2025-12-10
CURTIME() / CURRENT_TIME() 获取当前时间(HH:MM:SS) CURTIME() 15:30:45
NOW() 获取当前日期 + 时间(YYYY-MM-DD HH:MM:SS) NOW() 2025-12-10 15:30:45
YEAR(date) / MONTH(date) / DAY(date) 提取日期中的年 / 月 / 日 YEAR('2025-12-10') 2025
DATE_ADD(date, INTERVAL num unit) 给日期添加时间间隔(unit:DAY/MONTH/YEAR) DATE_ADD('2025-12-10', INTERVAL 1 MONTH) 2026-01-10
DATEDIFF(date1, date2) 计算日期差(date1 - date2,单位:天) DATEDIFF('2025-12-10', '2025-09-01') 100

2. 实战案例(基于学生表)

对数据经行修改与补充:

sql 复制代码
alter table student add column entry_date date comment '入学日期';  


truncate table student;

insert into student values
(1, '张三', 16, '男', '高一(1)班', 85.5, '西安市雁塔区', '2025-09-01'),
(2, '李四', 17, '男', '高一(2)班', 92.0, '西安市未央区', '2025-08-15'),
(3, '王五', 16, '女', '高一(1)班', 78.5, '宝鸡市渭滨区', '2025-09-01'),
(4, '赵六', 18, '男', '高一(2)班', 88.0, '西安市莲湖区', '2025-07-01'),
(5, '孙七', 17, '女', '高一(1)班', 90.0, '西安市碑林区', '2025-08-20'),
(6, '周八', 16, '男', '高一(3)班', 76.0, NULL, '2025-09-01'),  -- 地址为NULL
(7, '吴九', 18, '女', '高一(3)班', 89.5, '西安市雁塔区', '2025-06-10'),
(8, '郑十', 17, '男', '高一(2)班', 81.0, '咸阳市秦都区', '2025-08-15'),
(9, '钱十一', 16, '女', '高一(3)班', 95.0, '西安市碑林区', '2025-07-20'),
(10, '孙十二', 18, '男', '高一(1)班', 58.0, '西安市未央区', '2025-09-01'); 

案例 1:计算学生入学天数

需求:假设学生表有 entry_date 字段(入学日期,如 '2025-09-01'),计算每个学生的入学天数。

sql 复制代码
select name ,datediff(curdate(),entry_data) 入学天数 from student order by 入学天数 desc;

原理:DATEDIFF(当前日期, 入学日期) 得到两个日期的差值(天数),结果越大表示入学越早。

案例 2:提取入学年份和月份

需求:统计每个入学年份的学生人数。

sql 复制代码
select year(entry_date) 入学年份,count(id) 学生人数
from student
group by 入学年份;

执行结果:2025 年 → 10 人(假设所有学生都是 2025 年入学)。

案例 3:计算学生的预计毕业日期

需求:假设学制为 3 年,计算每个学生的预计毕业日期(入学日期 + 3 年)。

sql 复制代码
select name,entry_date,data_add(entry_date,interval 3 year) 预计毕业日期
from student;

执行结果:入学日期 '2025-09-01' → 毕业日期 '2028-09-01'。

3. 日期函数易错点

  • DATEDIFF(date1, date2) 的参数顺序:结果为 date1 - date2,若 date1 < date2,结果为负数;
  • DATE_ADD 的时间单位(unit)需小写(如 daymonthyear),不能写错;
  • NOW() 包含日期和时间,CURDATE() 仅包含日期,按需选择。

二、流程控制函数:SQL 中的 "条件判断"

流程控制函数能在 SQL 中实现类似编程语言的 if-elseswitch 逻辑,用于动态处理数据(如成绩分级、地址分类)。

1. 常用流程控制函数汇总

(1)IF 函数:简单条件判断

语法:IF(value, t, f)

  • 功能:若 value 为真(非 0、非 NULL),返回 t;否则返回 f

  • 示例:

    sql 复制代码
    -- 判断成绩是否及格(≥60分为及格)
    select name,score,if(scoer >= 60,'及格','不及格') 成绩等级 from student;

(2)IFNULL 函数:空值处理

语法:IFNULL(value1, value2)

  • 功能:若 value1 不为 NULL,返回 value1;否则返回 value2

  • 示例:

    sql 复制代码
    -- 若家庭地址为空,显示"未填写"
    select name,ifnull(address,'未填写') 家庭住址 from student;

    注意:空字符串(' ')≠ NULL,IFNULL 不会替换空字符串。

(3)CASE 函数:多条件分支

CASE 函数有两种写法,适用于复杂条件判断:

写法 1:值匹配(类似 switch)
sql 复制代码
CASE expr 
    WHEN val1 THEN res1 
    WHEN val2 THEN res2 
    ... 
    ELSE default 
END

示例:按班级分类(高一 (1) 班→一班,高一 (2) 班→二班,其他→其他班级):

sql 复制代码
select name,class.
    case class
        when '高一(1)班' then '一班'
        when '高一(2)班' then '二班'
        else '其他班'
    end 班级简称
from student
 
写法 2:条件匹配(类似 if-else if)
sql 复制代码
CASE 
    WHEN cond1 THEN res1 
    WHEN cond2 THEN res2 
    ... 
    ELSE default 
END

示例:成绩分级(≥90→优秀,≥80→良好,≥60→及格,<60→不及格):

sql 复制代码
select
    name,
    score,
    case
        when score >=90 then '优秀'
        when score >=80 then '良好'
        when score >=60 then '及格'
        else '不及格'
    end 成绩等级
from student;

2. 流程控制函数实战案例

案例 1:学生地址分类

需求:将学生家庭地址分为 "一线城市"(西安市)和 "其他城市"(非西安市)。

sql 复制代码
select name,address,if(substring(address,1,3)  = '西安市','一线城市','其他城市')
from student;

select name,address,
       case
           when address like '西安市%' then '一线城市'
           else '其他城市'
       end 城市等级
from student;

原理:用 LIKE '西安市%' 匹配以 "西安市" 开头的地址,结合 CASE 函数分类。

案例 2:综合判断学生状态

需求:根据成绩和入学天数判断学生状态:

  • 成绩≥90 且 入学天数≥100 → "优秀老生";
  • 成绩≥90 且 入学天数 <100 → "优秀新生";
  • 成绩 <60 → "需补考";
  • 其他 → "正常"。
sql 复制代码
select name,score, datediff(curdate(),entry_date)入学天数,
    case
        when score >=90 then if(datediff(curdate() >= 100,entry_date),'优秀老生','优秀新生')
        when score >= 60 then '正常'
        else '需补考'
    end 学生评级
from student

3. 流程控制函数易错点

  • CASE 函数必须以 END 结尾,否则语法报错;
  • 多条件判断时,WHEN 子句按顺序执行,满足第一个条件后不再判断后续条件;
  • IF 函数只能处理二元判断,复杂条件优先用 CASE 函数。

三、MySQL 函数整体总结

函数类型 核心函数 典型应用场景
字符串函数 CONCAT、LPAD、SUBSTRING、TRIM 拼接信息、标准化编号、截取字符
数值函数 ROUND、RAND、MOD、CEIL 成绩四舍五入、生成随机数、分组取模
日期函数 DATEDIFF、DATE_ADD、YEAR、NOW 计算入学天数、统计入学年份、预计毕业日期
流程控制函数 IF、IFNULL、CASE 成绩分级、空值替换、多条件分类

四、预告:MySQL 约束与多表查询

至此,我们已经掌握了 MySQL 常用函数的用法,函数能帮我们高效处理单表数据,但实际业务中还会遇到:

  • 如何保证数据的完整性(如学号不能重复、成绩不能为负数)?→ 需要学习 MySQL 约束
  • 如何关联多张表查询数据(如学生表 + 成绩表 + 班级表)?→ 需要学习 多表查询

下一篇我们将进入 MySQL 约束的学习,掌握主键、唯一、非空、外键等约束的用法,保障数据库数据的准确性!


希望这篇文章对你有帮助,如果你有任何问题或建议,欢迎在评论区留言。谢谢阅读(求攒攒 收藏 关注)!

相关推荐
玄同765几秒前
SQLite + LLM:大模型应用落地的轻量级数据存储方案
jvm·数据库·人工智能·python·语言模型·sqlite·知识图谱
吾日三省吾码2 分钟前
别只会“加索引”了!这 3 个 PostgreSQL 反常识优化,能把性能和成本一起打下来
数据库·postgresql
chian-ocean3 分钟前
百万级图文检索实战:`ops-transformer` + 向量数据库构建语义搜索引擎
数据库·搜索引擎·transformer
简佐义的博客16 分钟前
生信入门进阶指南:学习顶级实验室多组学整合方案,构建肾脏细胞空间分子图谱
人工智能·学习
近津薪荼18 分钟前
dfs专题4——二叉树的深搜(验证二叉搜索树)
c++·学习·算法·深度优先
那个村的李富贵23 分钟前
解锁CANN仓库核心能力:50行代码搭建国产化AIGC图片风格迁移神器
mysql·信息可视化·aigc·cann
小Tomkk23 分钟前
数据库 变更和版本控制管理工具 --Bytebase 安装部署(linux 安装篇)
linux·运维·数据库·ci/cd·bytebase
rannn_11144 分钟前
【苍穹外卖|Day4】套餐页面开发(新增套餐、分页查询、删除套餐、修改套餐、起售停售)
java·spring boot·后端·学习
qq_12498707531 小时前
基于JavaWeb的大学生房屋租赁系统(源码+论文+部署+安装)
java·数据库·人工智能·spring boot·计算机视觉·毕业设计·计算机毕业设计
游戏开发爱好者81 小时前
日常开发与测试的 App 测试方法、查看设备状态、实时日志、应用数据
android·ios·小程序·https·uni-app·iphone·webview