上一篇
场景:小张正在开发一个电商网站的后台系统,用户下单时间显示成
2025-08-15 14:30:45
这种冷冰冰的格式,老板要求改成8月15日 14:30
这样更友好的形式,小张抓耳挠腮——MySQL里的日期到底怎么格式化? 🤔
别急!这篇指南就是你的“时间魔法手册”!从基础查询到复杂转换,一网打尽MySQL日期处理技巧~
MySQL有三大常用日期类型,用对类型才能玩转格式化:
DATE
:只存储日期,格式YYYY-MM-DD
(如2025-08-15
) TIME
:只存储时间,格式HH:MM:SS
(如14:30:45
) DATETIME
:日期+时间,格式YYYY-MM-DD HH:MM:SS
(如2025-08-15 14:30:45
) 敲黑板:
DATETIME
还是TIMESTAMP
?如果不需要时区转换,优先选DATETIME
! 功能:把日期按指定格式输出,像用PPT模板一样简单!
符号 | 说明 | 示例结果 |
---|---|---|
%Y |
四位年份 | 2025 |
%y |
两位年份 | 25 |
%m |
数字月份(01-12) | 08 |
%c |
数字月份(1-12) | 8 |
%M |
英文月份名 | August |
%b |
缩写月份名 | Aug |
%d |
两位日期(01-31) | 15 |
%e |
数字日期(1-31) | 15 |
%H |
24小时制小时 | 14 |
%h |
12小时制小时 | 02 |
%i |
分钟(00-59) | 30 |
%p |
AM/PM | PM |
-- 案例1:转成中文习惯格式 SELECT DATE_FORMAT('2025-08-15 14:30:45', '%Y年%m月%d日 %H:%i') AS 格式化日期; -- 结果:2025年08月15日 14:30 -- 案例2:电商订单页显示 SELECT DATE_FORMAT(order_time, '%b %e, %Y %h:%i %p') FROM orders; -- 结果:Aug 15, 2025 02:30 PM -- 案例3:生成季度报表 SELECT DATE_FORMAT('2025-08-15', '第%Q季度') AS 季度; -- 结果:第3季度
场景:把字符串"2025年8月15日"
变成MySQL能识别的日期格式
SELECT STR_TO_DATE('2025年8月15日', '%Y年%c月%e日') AS 标准日期; -- 结果:2025-08-15
避坑指南:
NULL
,建议先用SELECT
测试再写入数据 除了格式化,这些函数能帮你快速处理日期:
SELECT DAY('2025-08-15') AS 日, -- 15 MONTHNAME('2025-08-15') AS 月份名, -- August QUARTER('2025-08-15') AS 季度; -- 3
-- 三天后的日期 SELECT DATE_ADD('2025-08-15', INTERVAL 3 DAY); -- 2025-08-18 -- 两个月前的今天 SELECT DATE_SUB(CURDATE(), INTERVAL 2 MONTH);
-- 计算两个日期相差天数 SELECT DATEDIFF('2025-08-20', '2025-08-15'); -- 5 -- 精确到秒的时间差 SELECT TIMESTAMPDIFF(SECOND, '2025-08-15 14:00:00', '2025-08-15 14:30:45'); -- 1845
WITH RECURSIVE date_range AS ( SELECT CURDATE() AS date UNION ALL SELECT DATE_SUB(date, INTERVAL 1 DAY) FROM date_range WHERE date >= DATE_SUB(CURDATE(), INTERVAL 29 DAY) ) SELECT DATE_FORMAT(date, '%m/%d') AS 简写日期 FROM date_range;
SELECT DATE_FORMAT(DATE_SUB(order_date, INTERVAL WEEKDAY(order_date) DAY), '%Y-%m-%d') AS 周起始日, COUNT(*) AS 订单数 FROM orders GROUP BY 周起始日;
时区问题:
NOW()
、CURDATE()
的结果 UTC_TIMESTAMP()
获取无时区时间 性能优化:
-- 错误写法(全表扫描) SELECT * FROM logs WHERE DATE_FORMAT(create_time, '%Y-%m-%d') = '2025-08-15';
-- 正确写法(能用索引)
SELECT * FROM logs WHERE create_time BETWEEN '2025-08-15 00:00:00' AND '2025-08-15 23:59:59';
千年虫陷阱:
%y
)在00-69会被识别为2000-2069,70-99识别为1970-1999 掌握MySQL日期格式化就像获得时间管理术——
DATE_FORMAT()
+格式符号表 DATE_ADD
/DATEDIFF
做动态计算 下次遇到日期显示问题,记得掏出这份指南!⏰💡 现在就去试试把你的2025-08-15
变成更有温度的格式吧~
本文由 矫沛凝 于2025-08-01发表在【云服务器提供商】,文中图片由(矫沛凝)上传,本平台仅提供信息存储服务;作者观点、意见不代表本站立场,如有侵权,请联系我们删除;若有图片侵权,请您准备原始证明材料和公证书后联系我方删除!
本文链接:https://vps.7tqx.com/wenda/507086.html
发表评论