mysql格式化时间,是一个非常核心且常用的操作

时间:2025-10-09 14:38

在 MySQL 中格式化时间和日期是一个非常核心且常用的操作。这主要通过内置的 DATE_FORMAT() 函数来实现。

核心函数:DATE_FORMAT(date, format)

  • date: 你要格式化的日期或日期时间列。
  • format: 一个包含格式说明符的字符串,用于定义最终的输出样式。

常用格式说明符

以下是一些最常用的格式符号,你可以像搭积木一样组合它们:
格式符号 描述 示例 (基于 2023-10-27 15:08:30)
年 (Year)    
%Y 4 位数的年份 2023
%y 2 位数的年份 23
月 (Month)    
%m 月份,数值 (01-12) 10
%c 月份,数值 (1-12) 10
%M 月份,英文全名 October
%b 月份,英文缩写 Oct
日 (Day)    
%d 月份中的天数 (01-31) 27
%e 月份中的天数 (1-31) 27
%j 年中的天数 (001-366) 300
星期 (Week)    
%W 星期名,英文全名 Friday
%w 星期几 (0=Sunday, 1=Monday, ..., 6=Saturday) 5
%U 周数 (00-53),以 Sunday 为一周的第一天 43
%u 周数 (00-53),以 Monday 为一周的第一天 43
时 (Hour)    
%H 小时 (00-23) 15
%h / %I 小时 (01-12) 03
分 (Minute)    
%i 分钟 (00-59) 08
秒 (Second)    
%s / %S 秒 (00-59) 30
上午 / 下午 (AM/PM)    
%p AM 或 PM PM
其他    
%% 一个文字 % 字符 %

常见示例

假设我们有一个 orders 表,其中包含一个 created_at 列,其值为 2023-10-27 15:08:30

1. 标准格式 (YYYY-MM-DD)

这是最常见的日期格式。
sql
SELECT DATE_FORMAT(created_at, '%Y-%m-%d') AS formatted_date 
FROM orders;
 
结果: 2023-10-27

2. 中文格式 (YYYY年MM月DD日)

sql
SELECT DATE_FORMAT(created_at, '%Y年%m月%d日') AS formatted_date 
FROM orders;
 
结果: 2023年10月27日

3. 完整日期和时间 (YYYY-MM-DD HH:MM:SS)

sql
SELECT DATE_FORMAT(created_at, '%Y-%m-%d %H:%i:%s') AS formatted_datetime 
FROM orders;
 
结果: 2023-10-27 15:08:30

4. 带星期的格式 (YYYY年MM月DD日 (星期W))

sql
-- MySQL 8.0+ 支持中文星期
SELECT DATE_FORMAT(created_at, '%Y年%m月%d日 (%W)') AS formatted_date 
FROM orders;
 
结果: 2023年10月27日 (Friday)
注意: MySQL 默认不直接支持输出中文星期(如 “星期五”)。如果需要,通常需要在应用层处理,或者在 SQL 中使用 CASE 语句进行转换。

5. 只获取年份或月份

sql
-- 获取年份
SELECT DATE_FORMAT(created_at, '%Y') AS year 
FROM orders;
-- 结果: 2023

-- 获取月份
SELECT DATE_FORMAT(created_at, '%m') AS month 
FROM orders;
-- 结果: 10
 

6. 按格式分组统计

这是 DATE_FORMAT 在数据分析中的强大应用,例如按天统计订单数量。
sql
SELECT 
    DATE_FORMAT(created_at, '%Y-%m-%d') AS order_date, 
    COUNT(*) AS total_orders
FROM 
    orders
GROUP BY 
    order_date
ORDER BY 
    order_date;
 
结果:
plaintext
+------------+--------------+
| order_date | total_orders |
+------------+--------------+
| 2023-10-25 |           10 |
| 2023-10-26 |           15 |
| 2023-10-27 |           23 |
+------------+--------------+
 

反向操作:字符串转日期 STR_TO_DATE()

如果你有一个非标准格式的字符串,想把它转换成 MySQL 的 DATE 或 DATETIME 类型以便进行比较或计算,可以使用 STR_TO_DATE()
sql
-- 将 '27/10/2023' 转换为 DATE 类型
SELECT STR_TO_DATE('27/10/2023', '%d/%m/%Y') AS converted_date;
-- 结果: 2023-10-27 (DATE 类型)

-- 将 'October 27, 2023 15:08' 转换为 DATETIME 类型
SELECT STR_TO_DATE('October 27, 2023 15:08', '%M %d, %Y %H:%i') AS converted_datetime;
-- 结果: 2023-10-27 15:08:00 (DATETIME 类型)
 

总结

  • 格式化输出:使用 DATE_FORMAT(date, format)
  • 字符串转日期:使用 STR_TO_DATE(string, format)
  • 关键:掌握常用的格式符号(如 %Y%m%d%H%i%s)是灵活运用这两个函数的基础。
MySQL日志到底在哪里?Linux/Windows/macOS全平台查找方法在此
MySQL数据库管理工具全景评测:从Workbench到DBeaver的技术选型指南
MySQL密码忘了怎么办?这份重置指南能救急,Windows/Linux/Mac都适用
你的MySQL为什么经常卡死?可能是锁表在作怪!快速排查方法在此
别再混淆Hive和MySQL了!读懂它们的天壤之别,才算摸到大数据的门道
清空MySQL数据表千万别用错!DELETE和TRUNCATE这个区别可能导致重大事故
你的MySQL中文排序一团糟?记住这几点,轻松实现准确拼音排序!
企业级数据架构:MySQL递归查询在组织权限树中的高级应用实践
企业级MySQL索引优化实战:高并发场景下的索引设计与调优
企业级MySQL时间管理实践:高并发场景下的性能优化与时区解决方案