MySQL 视频课 · 50 集 / 内置函数:字符串、数值、日期、流程 / P29
第 29 集 / 共 50 · 内置函数:字符串、数值、日期、流程 · 视频 p=29 · 时长 9:27
P29 29. 基础-函数-日期函数
看视频,对照阅读:在新标签打开原视频(p=29)
日期函数最容易错在“差几天”和“差几岁”的区分上。
复习模式:快速跳知识点(详解在下方各节)
复习顺序:先看“一句话理解”能否复述,再扫步骤,最后做自测;答不出时回到小例与易错。
一句话理解
日期函数用来取当前时间、拆出年月日、做日期加减,以及算两个日期差多少天。
按这 4 步做
- 取当前:CURDATE() 只要日期,CURTIME() 只要时间,NOW() 日期时间都要。
- 拆字段:YEAR / MONTH / DAY 从日期里取出对应部分。
- 加减:DATE_ADD(日期, INTERVAL n DAY),单位可换成 MONTH、YEAR。
- 算差:DATEDIFF(d1,d2) 得 d1−d2 的天数;算整年数用 TIMESTAMPDIFF(YEAR, 起始, 结束)。
小例
SELECT DATEDIFF('2026-10-22', '2026-10-01') AS 相差天数,
TIMESTAMPDIFF(YEAR, '2004-12-31', '2026-10-22') AS 周岁,
YEAR('2004-12-31') AS 出生年,
DATE_ADD('2026-10-22', INTERVAL 7 DAY) AS 一周后;
【原创演示】全部用固定日期字面量,不写 NOW(),所以每次结果都一样。差值 21 天;2004-12-31 出生到 2026-10-22 还没过生日,周岁是 21,而 2026−2004=22 只是年份相减;一周后是 2026-10-29。
易错点
- 用 YEAR(今天) − YEAR(生日) 当年龄:没过生日的人会被多算一岁,差一天就错。
- DATEDIFF 参数顺序记反:DATEDIFF(a,b) 是 a−b,反过来符号相反。
- 在示例和测试里写 NOW():每次运行结果都变,断言无法复现;固定日期字面量才能稳定对比。
30 秒速记
CURDATE/CURTIME/NOW、YEAR/MONTH/DAY、DATE_ADD、DATEDIFF(a−b)、TIMESTAMPDIFF 算整年;测试用固定日期。
自测(2 题,先答再展开)
自测 1:为什么算年龄不能用 YEAR(CURDATE()) − YEAR(birthday)?
它只比较年份,忽略今年生日是否已过;应使用 TIMESTAMPDIFF(YEAR, birthday, CURDATE()),它按完整年数计算。
自测 2:DATEDIFF('2026-10-01','2026-10-22') 是正还是负?
负。函数是前一个日期减后一个日期,10-01 减 10-22 得 −21。
材料与来源
展开材料出处、讲义页码与证据等级
| 材料 | 类型 / 位置 | 支持了什么 |
|---|---|---|
| P29 原视频页(BV1Kr4y1i7ru) | 平台视频页 · P29;采样静帧 t012/t20/t30/t40/t50/t60/t70/t80/tend | t012/t040 为“日期函数”标题页。 |
| MySQL 8.0 Reference:日期与时间函数 | 官方文档 | 核对 DATEDIFF、TIMESTAMPDIFF、DATE_ADD 的语义,未逐字引用。 |
按 t012/t040 帧核对:画面标题为“日期函数”,其余帧是代码区,未取得完整函数表。函数名另由 P31 小结页(CURDATE、CURTIME、NOW、YEAR、MONTH、DAY、DATE_ADD、DATEDIFF)核对;TIMESTAMPDIFF 属文档补充,正文已单独说明用途。示例为原创且使用固定日期;无字幕。
讲义对照:讲义 3.3 日期函数 · p58–59(公开镜像;按主题对应,切点 notexact)
- 画面静帧 9 帧,采样点 0:12–9:14 / 全片 9:27(只用于确认画面主题,不作内容边界)
- 原声字幕未取得:匿名接口字幕轨为空且需登录,未使用任何账号
等级含义:平台视频页 / 官方文档 / 课件 = 原始材料;二手整理 = 参考;推断 = 未经核实。站内补充的解释与练习会在此说明。