MySQL提供DATE_ADD()、DATE_SUB()实现日期增减,DATEDIFF()和TIMESTAMPDIFF()计算日期差,YEAR()等函数提取日期部分,NOW()、DATE_FORMAT()处理当前时间与格式化。

MySQL 提供了丰富且实用的日期计算函数,能轻松完成加减天数、计算间隔、提取日期部分等操作,无需手动转换时间戳或复杂逻辑。
加减日期:DATE_ADD() 和 DATE_SUB()
这是最常用的日期增减方式,支持年、月、日、小时、分钟等多种单位。
- DATE_ADD(date, INTERVAL expr unit):给日期加上指定间隔
- DATE_SUB(date, INTERVAL expr unit):从日期中减去指定间隔
例如:
SELECT DATE_ADD('2024-05-01', INTERVAL 10 DAY); → '2024-05-11'
SELECT DATE_SUB(NOW(), INTERVAL 1 MONTH); → 当前时间往前推一个月
注意:对月份做加减时会自动处理月末边界(如1月31日 + 1 month → 2月28日或29日)。
计算两个日期之间的差值:DATEDIFF() 和 TIMESTAMPDIFF()
DATEDIFF(end_date, start_date) 只返回两个日期之间的**天数差**(忽略时分秒),结果为整数,end 在前、start 在后。
SELECT DATEDIFF('2024-12-25', '2024-01-01'); → 359
TIMESTAMPDIFF(unit, start_date, end_date) 更灵活,可按年、月、日、小时等单位计算精确差值(单位在前,起止顺序与 DATEDIFF 相反)。
SELECT TIMESTAMPDIFF(YEAR, '1990-06-15', NOW()); → 年龄(按年份差)
SELECT TIMESTAMPDIFF(MONTH, '2023-03-10', '2024-05-20'); → 14
提取和构造日期:YEAR()、MONTH()、DAY()、MAKEDATE() 等
用于拆解或组合日期值:
- YEAR(date)、MONTH(date)、DAY(date)、HOUR(time):提取对应部分
- MAKEDATE(year, dayofyear):用年份和一年中的第几天构造日期(如 MAKEDATE(2024, 60) → '2024-02-29')
- STR_TO_DATE(str, format):将字符串按格式转为日期(如 STR_TO_DATE('05/20/2024', '%m/%d/%Y'))
这些函数常配合 WHERE 或 GROUP BY 使用,比如按年份统计:GROUP BY YEAR(create_time)。
当前时间与日期格式化:NOW()、CURDATE()、DATE_FORMAT()
NOW() 返回当前日期时间,CURDATE() 只返回日期部分,CURTIME() 只返回时间部分。
DATE_FORMAT(date, format) 用于按需格式化输出,常用格式符包括:
- %Y:4位年份,%y:2位年份
- %m:01–12 月,%M:英文全称(January)
- %d:01–31 日,%W:星期全名
例如:SELECT DATE_FORMAT(NOW(), '%Y年%m月%d日 %H:%i');










