mysql中格式化日期主要用date_format()函数,按指定模板将日期转为字符串,需注意时区、数据类型及NULL处理,并可配合YEAR()、DATE()等函数使用。

MySQL 中格式化日期主要靠 DATE_FORMAT() 函数,它能把日期时间值按指定模式转成可读的字符串。关键不是记全所有格式符,而是掌握常用组合和注意事项。
DATE_FORMAT() 基本用法
语法:DATE_FORMAT(date, format),第一个参数是日期类型(如 DATE、DATETIME、timestamp),第二个是格式化模板字符串。
- 模板中用 % 开头的占位符表示具体部分,比如 %Y 是 4 位年份,%y 是 2 位年份
- 常见格式符:%m(01–12 月),%c(1–12 月,不补零),%d(01–31 日),%e(1–31 日,不补零)
- 星期和月份名可用 %W(Monday)、%w(0=Sunday)、%M(January)、%b(Jan)
常用格式化示例
假设字段 created_at 值为 2024-07-15 14:23:56:
- DATE_FORMAT(created_at, ‘%Y-%m-%d’) → 2024-07-15
- DATE_FORMAT(created_at, ‘%Y年%m月%d日 %H:%i’) → 2024年07月15日 14:23
- DATE_FORMAT(created_at, ‘%b %e, %Y’) → Jul 15, 2024
- DATE_FORMAT(created_at, ‘%W, %M %e, %Y’) → Monday, July 15, 2024
注意时区与数据类型
DATE_FORMAT() 不改变原始值,只影响显示结果;它对 NULL 返回 NULL。
- 如果字段是字符串(如 ‘20240715’),需先用 STR_TO_DATE() 转为日期再格式化,例如:
DATE_FORMAT(STR_TO_DATE(‘20240715’, ‘%Y%m%d’), ‘%Y/%m/%d’) - 查询时若涉及时区,确保系统或会话时区设置正确(select @@time_zone 可查看),否则 NOW() 或 CURDATE() 可能与预期不符
- 对 DATETIME 字段格式化时,%H(24 小时制)比 %h(12 小时制)更常用,避免混淆
其他相关函数补充
除 DATE_FORMAT 外,几个辅助函数也常一起使用:
- YEAR()/MONTH()/DAY():直接提取数字部分,适合做条件筛选或分组
- DATE():只取日期部分(去掉时间),等价于 DATE_FORMAT(dt, ‘%Y-%m-%d’)
- TIME():只取时间部分
- FROM_unixTIME():把 Unix 时间戳转为可读日期,支持格式化,如 FROM_UNIXTIME(1721024636, ‘%Y-%m-%d’)