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)是灵活运用这两个函数的基础。
内网穿透工具自托管 vs 云端中转:穿云箭和花生壳优缺点深度分析
内网ip远程控制,借助内网IP实现远程控制的完整指南
远程访问内网IP:打破网络边界的连接艺术
理解Windows系统中的NAT转发功能
内网穿透工具自托管 vs 云端中转:穿云箭和花生壳优缺点分析
手把手配置SSR端口转发:UDP协议支持与高级设置详解
什么是nat123?nat123的核心功能
nat123端口映射:轻松实现外网访问内网
nat123下载:轻松获取内网穿透工具
nat123官网:老牌内网穿透工具