日期时间运算要点
- NOW() 取当前日期时间,CURDATE() 只取日期,CURTIME() 只取时间
- DATE_ADD(d, INTERVAL n 单位) 加时间段,DATE_SUB 减时间段
- DATEDIFF(d1, d2) 返两个日期相差的天数,只算日期部分
- DATE_FORMAT(d, 模板) 把日期格式化成任意字符串
- YEAR / MONTH / DAY 提取年月日,便于按维度分组
- TIMESTAMPDIFF(单位, 早, 晚) 精确计算两个时间差
日期时间运算示例
-- 下单后 7 天到期的单子
SELECT order_id, DATE_ADD(created_at, INTERVAL 7 DAY) AS due
FROM orders;
-- 按月份统计成交额
SELECT DATE_FORMAT(created_at, '%Y-%m') AS month,
SUM(amount) AS total
FROM orders
GROUP BY month;
-- 两笔时间相差多少小时
SELECT TIMESTAMPDIFF(HOUR, start_at, end_at) AS hours
FROM task;
避坑提醒:DATEDIFF 只看日期不看时间,跨午夜的『不到一天』也会算成 0 或 1 天。需要精确到小时分钟,改用 TIMESTAMPDIFF(HOUR, ...) 才靠谱。