在数据分析和报表开发中,时间维度的处理是绝对绕不开的一环。无论是计算用户的注册时长,还是按周/月生成数据看板,熟练掌握 MySQL 的日期函数都是必修课。
本文将结合实际业务场景,梳理 MySQL 中最核心、最高频的日期函数,并通过通俗易懂的小例子帮你快速掌握。
目录
[一、 获取当前时间:一切的起点](#一、 获取当前时间:一切的起点)
[二、 日期提取与格式化:让数据更直观](#二、 日期提取与格式化:让数据更直观)
[三、 日期加减运算:时间窗口的计算](#三、 日期加减运算:时间窗口的计算)
[四、 日期差值计算:衡量时间跨度](#四、 日期差值计算:衡量时间跨度)
一、 获取当前时间:一切的起点
在记录数据插入时间或计算"距今多久"时,我们需要获取系统的当前时间。
NOW():返回当前的日期和时间(YYYY-MM-DD HH:MM:SS)。
- 示例 :
SELECT NOW();-- 结果:2026-08-31 11:46:57CURDATE():仅返回当前日期(YYYY-MM-DD)。
- 示例 :
SELECT CURDATE();-- 结果:2026-08-31CURTIME():仅返回当前时间(HH:MM:SS)。
- 示例 :
SELECT CURTIME();-- 结果:11:46:57
二、 日期提取与格式化:让数据更直观
原始的时间戳往往不符合展示要求,我们需要对其进行"拆解"或"换装"。
YEAR()/MONTH()/DAY():分别提取日期中的年、月、日。
- 示例 :
SELECT MONTH('2026-08-31');-- 结果:8DATE_FORMAT(date, format):将日期按照指定格式输出,是报表开发的"美颜神器"。
- 场景:将数据库中的标准时间转换为中文习惯的"2026年08月"格式
- 示例 :
SELECT DATE_FORMAT('2026-08-31', '%Y年%m月');-- 结果:2026年08月- 常用格式符 :
%Y(四位年),%m(两位月),%d(两位日),%H(24小时制),%i(分钟),%s(秒)。
三、 日期加减运算:时间窗口的计算
DATE_ADD(date, INTERVAL expr unit):在指定日期上增加一段时间。
- 示例 :
SELECT DATE_ADD('2026-08-31', INTERVAL 30 DAY);-- 结果:2026-09-30DATE_SUB(date, INTERVAL expr unit):在指定日期上减去一段时间。
- 示例 :
SELECT DATE_SUB('2026-08-31', INTERVAL 3 MONTH);-- 结果:2026-05-31
四、 日期差值计算:衡量时间跨度
计算两个时间点之间的间隔,是业务逻辑中最常见的需求。
DATEDIFF(date1, date2):返回两个日期之间相差的天数 (date1 - date2)。
- 示例 :
SELECT DATEDIFF('2026-08-31', '2026-08-01');-- 结果:30TIMESTAMPDIFF(unit, datetime1, datetime2):比DATEDIFF更强大,可以指定返回的单位(如年、月、小时等)。
- 示例 :
SELECT TIMESTAMPDIFF(YEAR, '2000-08-31', '2026-08-31');-- 结果:26
总结
MySQL 的日期函数虽然繁多,但核心逻辑只有三个:获取当前时间 、提取/格式化时间 、计算时间差/时间偏移。
希望这篇指南能帮你在处理时间数据时更加游刃有余!如果觉得有用,欢迎点赞收藏~