一、基础作用
把 日期/时间类型数据,按照想要的格式转换成字符串 。比如把 2025-06-19 08:49:00
变成 2025年06月19日 08时49分
这类自定义格式,方便前端展示或数据导出。
二、语法结构
DATE_FORMAT(日期字段/日期值, '格式化模板')
- 日期字段/日期值:可以是
NOW()
(当前时间)、表中DATETIME
/DATE
类型字段(如order_time
)。 - 格式化模板:用
%
开头的占位符组合,定义最终字符串样式(下面会列常用占位符)。
三、常用占位符(重点记这些!)
占位符 | 含义 | 示例(以 |
| 四位年份 |
|
| 两位年份( |
|
| 两位月份(补零, |
|
| 月份(不补零, |
|
| 两位日期(补零, |
|
| 24 小时制小时( |
|
| 12 小时制小时( |
|
| 分钟(补零, |
|
| 秒(补零, |
|
| 星期全称( |
|
| 星期简称( |
|
四、实战示例
假设表 orders
有字段 order_time
(类型 DATETIME
),存了下单时间,需求是格式化展示:
1. 基础用法:转成「年-月-日 时:分:秒」
SELECT
order_time,
DATE_FORMAT(order_time, '%Y-%m-%d %H:%i:%s') AS formatted_time
FROM orders;
结果类似:
order_time | formatted_time |
2025-06-19 08:49:10 | 2025-06-19 08:49:10 |
2. 自定义格式:「xx年xx月xx日 星期x xx点xx分」
SELECT
order_time,
DATE_FORMAT(
order_time,
'%Y年%m月%d日 星期%a %H点%i分'
) AS chinese_format
FROM orders;
结果:
order_time | chinese_format |
2025-06-19 08:49:10 | 2025年06月19日 星期Wed 08点49分 |
3. 配合 NOW()
用:格式化当前时间
SELECT
DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%s') AS current_time;
结果(随当前时间变化):
2025-06-19 08:50:30
五、常见场景
- 报表展示:把数据库里的时间转成用户易读的格式(如「2025/06/19 08:50」)。
- 数据导出:Excel 或 CSV 里的时间统一格式,避免不同时区/数据库的显示差异。
- 条件查询:结合
STR_TO_DATE
(反向,字符串转日期),比如按自定义格式的时间范围查数据。
六、注意点
- 占位符必须用 英文半角符号,别写成中文百分号,否则会报错。
- 模板里的非占位符内容(如
年
、月
文字),会原封不动拼到结果里,自由发挥空间大~