MySQL 中处理日期数据,核心是掌握几个常用 DATE 相关函数和日期类型的基本用法。不需要死记硬背,理解场景、类型和函数的对应关系,就能准确完成大部分日期操作。
明确日期字段该用什么类型
MySQL 提供了多种日期时间类型,选对类型是正确处理的第一步:
DATE:只存日期(如 '2023-05-12'),适合生日、签约日等无需时间的场景 DATETIME:存日期+时间(如 '2023-05-12 14:30:22'),精度到秒,不带时区 TIMESTAMP:也存日期时间,但范围小(1970–2038)、自动时区转换、可设默认值为 CURRENT_TIMESTAMP 避免用字符串(如 VARCHAR)存日期——没法直接比较、不能用索引、易出格式错误提取日期中的年月日或星期
用 YEAR()、MONTH()、DAY()、WEEKDAY() 等函数快速取值:
SELECT YEAR('2023-05-12'); → 返回 2023 SELECT MONTH('2023-05-12'); → 返回 5 SELECT DAYOFWEEK('2023-05-12'); → 周日=1,周一=2…返回 6(那天是周五) 注意:DAY() 和 DAYOFMONTH() 效果一样;DAYNAME() 返回英文星期名(如 'Friday')计算日期差和加减天数
不用手动算,MySQL 提供简洁函数:
DATEDIFF('2023-05-20', '2023-05-12'); → 返回 8(前者减后者,单位是天) DATE_ADD('2023-05-12', INTERVAL 7 DAY); → 得到 '2023-05-19' DATE_SUB('2023-05-12', INTERVAL 1 MONTH); → 返回 '2023-04-12' INTERVAL 后可接 DAY / WEEK / MONTH / YEAR / HOUR / MINUTE 等,灵活组合把字符串转成日期,或把日期格式化输出
导入数据常遇到字符串日期,需转换;展示时又常要统一格式:
STR_TO_DATE('12/05/2023', '%d/%m/%Y'); → 转成 '2023-05-12'(注意顺序和符号匹配) DATE_FORMAT('2023-05-12', '%Y年%m月%d日'); → 输出 '2023年05月12日' 常用格式符:%Y(4位年)、%y(2位年)、%m(01–12)、%c(1–12,无前导零)、%d(01–31)