1. 日期时间函数基础认知
刚接触MySQL那会儿,我最头疼的就是处理各种日期时间格式。业务系统里几乎每个表都少不了create_time、update_time这些字段,做报表时更是天天要和日期计算打交道。记得有次统计月度订单,我对着TIMESTAMPDIFF和DATE_FORMAT函数文档研究了整整一下午——这大概就是每个后端开发必经的"日期函数启蒙课"。
MySQL提供了二十多种日期时间函数,按照功能可以划分为几个核心类别:
- 基础获取类:NOW()、CURDATE()、CURTIME()这些获取当前时间的函数
- 格式转换类:DATE_FORMAT()、STR_TO_DATE()这类处理字符串与日期互转的函数
- 计算调整类:DATE_ADD()、DATEDIFF()等执行日期算术运算的函数
- 提取组件类:YEAR()、MONTH()、DAY()这类提取特定时间部分的函数
实际项目中我发现,90%的日期操作需求都能用这四类函数组合解决。比如最近做的会员积分过期功能,就用了DATE_ADD配合CURDATE判断有效期。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 核心函数详解与避坑指南
2.1 时间获取三剑客
这三个函数看似简单,但用错场景会导致隐性问题:
sql复制SELECT
NOW(), -- 2023-08-20 14:30:45 (带时区)
CURDATE(), -- 2023-08-20
CURTIME() -- 14:30:45
生产环境踩坑记录:
- 在AWS RDS上发现NOW()返回UTC时间,而SYSDATE()返回服务器本地时间
- 高并发系统记录日志时,多个NOW()调用可能返回不同时间戳
- CURTIME()在跨时区应用中要特别小心时区转换
2.2 日期格式化双雄
DATE_FORMAT的格式化符号多达32种,这几个最常用:
sql复制SELECT
DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%s'), -- 标准格式
DATE_FORMAT(NOW(), '%W %M %Y'), -- Sunday August 2023
DATE_
