SQL中DATE_FORMAT函数是MySQL数据库提供的日期格式化函数,主要用于将日期、时间或日期时间类型的字段按照指定的格式转换为字符串,在数据统计、报表展示、日志记录等场景中应用十分广泛。

DATE_FORMAT函数基本语法
DATE_FORMAT函数的语法格式如下:
DATE_FORMAT(date, format)
其中参数含义如下:
- date:需要格式化的日期时间值,可以是日期类型的字段、日期字面量或者返回日期的表达式。
- format:格式化字符串,由各类格式符号组成,用来定义最终输出的日期格式。
常用格式符号说明
DATE_FORMAT函数支持大量的格式符号,以下是实际开发中最常用的符号及对应效果:
| 格式符号 | 含义 | 示例输出 |
|---|---|---|
| %Y | 四位年份 | 2024 |
| %y | 两位年份 | 24 |
| %m | 两位月份,不足两位补0 | 03 |
| %c | 月份,不补0 | 3 |
| %d | 两位日期,不足两位补0 | 05 |
| %H | 24小时制小时,不足两位补0 | 14 |
| %h | 12小时制小时,不足两位补0 | 02 |
| %i | 两位分钟,不足两位补0 | 09 |
| %s | 两位秒数,不足两位补0 | 08 |
| %W | 星期全名 | Monday |
| %w | 星期数字,0代表周日,1-6代表周一到周六 | 1 |
实际使用示例
示例1:格式化当前日期时间
将当前时间格式化为年-月-日 时:分:秒的格式:
SELECT DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%s') AS formatted_time; -- 输出结果类似:2024-03-15 14:30:25
示例2:查询时格式化表字段
假设有一张order_info表,其中包含create_time字段存储订单创建时间,需要查询订单编号和格式化为年月日的创建时间:
SELECT order_id, DATE_FORMAT(create_time, '%Y年%m月%d日') AS order_date FROM order_info WHERE create_time >= '2024-01-01';
示例3:按格式化后的日期分组统计
统计每天的下单数量,按照日期分组:
SELECT DATE_FORMAT(create_time, '%Y-%m-%d') AS day, COUNT(*) AS order_count FROM order_info GROUP BY DATE_FORMAT(create_time, '%Y-%m-%d') ORDER BY day;
使用注意事项
- DATE_FORMAT函数是MySQL特有的函数,其他数据库如Oracle、SQL Server有各自的日期格式化方式,不要跨数据库使用。
- 如果传入的date参数不是有效的日期值,函数会返回NULL。
- 格式字符串中的非格式符号会原样输出,比如上面的%Y年%m月%d日中的年、月、日会直接显示在结果中。
如果需要在其他数据库中实现类似功能,Oracle可以使用TO_CHAR函数,SQL Server可以使用CONVERT函数,语法和格式符号会有差异,需要根据对应数据库的文档调整。
DATE_FORMATSQL日期格式化日期格式符号MySQL日期函数日期查询修改时间:2026-06-29 00:03:26