mysql时间格式化,灵活处理各种日期时间展示场景

时间:2025-09-19 14:27


在 MySQL 中,可以使用 DATE_FORMAT() 函数对日期和时间进行格式化,也可以使用 STR_TO_DATE() 函数将字符串转换为日期格式。

一、DATE_FORMAT() 函数(日期转字符串)

语法

sql
DATE_FORMAT(日期字段, 格式字符串)
 

常用格式符

  • %Y:四位年份(如 2023)
  • %y:两位年份(如 23)
  • %m:两位月份(01-12)
  • %d:两位日期(01-31)
  • %H:24 小时制小时(00-23)
  • %h:12 小时制小时(01-12)
  • %i:分钟(00-59)
  • %s:秒(00-59)
  • %W:星期全称(如 Sunday)
  • %a:星期缩写(如 Sun)
  • %M:月份全称(如 January)
  • %b:月份缩写(如 Jan)

示例

sql
-- 假设表中有 create_time 字段(datetime 类型)
SELECT 
  create_time AS 原始时间,
  DATE_FORMAT(create_time, '%Y-%m-%d') AS 年月日,
  DATE_FORMAT(create_time, '%Y-%m-%d %H:%i:%s') AS 年月日时分秒,
  DATE_FORMAT(create_time, '%m/%d/%Y %h:%i %p') AS 美式格式,
  DATE_FORMAT(create_time, '%W, %M %d, %Y') AS 星期月份格式
FROM 表名;
 

二、STR_TO_DATE() 函数(字符串转日期)

当需要将字符串按指定格式解析为日期类型时使用。

语法

sql
STR_TO_DATE(字符串, 格式字符串)
 

示例

sql
-- 将字符串转换为日期
SELECT 
  STR_TO_DATE('2023-10-05', '%Y-%m-%d') AS 日期,
  STR_TO_DATE('10/05/2023 14:30', '%m/%d/%Y %H:%i') AS 日期时间;

-- 插入时转换格式
INSERT INTO 表名(时间字段) 
VALUES (STR_TO_DATE('2023年10月05日', '%Y年%m月%d日'));
 

三、常用场景示例

  1. 查询特定格式的时间

sql
-- 查询今天的订单(只比较日期部分)
SELECT * FROM orders 
WHERE DATE_FORMAT(create_time, '%Y-%m-%d') = '2023-10-05';
 

  1. 按格式化后的时间分组统计

sql
-- 按月份统计订单数量
SELECT 
  DATE_FORMAT(create_time, '%Y-%m') AS 月份,
  COUNT(*) AS 订单数
FROM orders 
GROUP BY 月份
ORDER BY 月份;
 

  1. 默认日期格式转换
    MySQL 中默认的日期显示格式是 YYYY-MM-DD,时间是 HH:MM:SS,可以通过设置会话变量临时修改:

sql
-- 临时修改当前会话的日期显示格式
SET @@session.date_format = '%Y年%m月%d日';
SET @@session.time_format = '%H时%i分%s秒';
 

根据实际需求选择合适的格式符组合,可以灵活处理各种日期时间展示场景。
MySQL日志到底在哪里?Linux/Windows/macOS全平台查找方法在此
MySQL数据库管理工具全景评测:从Workbench到DBeaver的技术选型指南
MySQL密码忘了怎么办?这份重置指南能救急,Windows/Linux/Mac都适用
你的MySQL为什么经常卡死?可能是锁表在作怪!快速排查方法在此
别再混淆Hive和MySQL了!读懂它们的天壤之别,才算摸到大数据的门道
清空MySQL数据表千万别用错!DELETE和TRUNCATE这个区别可能导致重大事故
你的MySQL中文排序一团糟?记住这几点,轻松实现准确拼音排序!
企业级数据架构:MySQL递归查询在组织权限树中的高级应用实践
企业级MySQL索引优化实战:高并发场景下的索引设计与调优
企业级MySQL时间管理实践:高并发场景下的性能优化与时区解决方案