上一篇
🔥 最新动态(2025年8月)
MySQL 8.4近期优化了时区处理性能,时间函数效率提升20%!对于全球化的应用来说,正确处理时间格式比以往更轻松~
程序员日常三大头疼事:命名、缓存、调时间 😅 数据库里的时间可能长这样:
2025-08-20 15:30:00 # 你以为的 1692538200 # 实际存储的(时间戳)
不处理好时间格式?前端显示乱码、报表统计出错、跨时区比较直接翻车…
类型 | 格式示例 | 存储空间 | 特点 |
---|---|---|---|
DATE |
2025-08-20 | 3字节 | 只存日期 |
TIME |
15:30:00 | 3字节 | 可存负值(-'02:00:00') |
DATETIME |
2025-08-20 15:30:00 | 8字节 | 不涉及时区 |
TIMESTAMP |
2025-08-20 15:30:00 | 4字节 | 自动转UTC,范围较小 |
💡 小知识:TIMESTAMP
最大只到2038年(32位限制),用DATETIME
更稳妥!
SELECT DATE_FORMAT(NOW(), '%Y年%m月%d日 %H:%i:%s'); -- 输出:2025年08月20日 15:30:00 SELECT DATE_FORMAT('2025-08-20', '%W, %M %D'); -- 输出:Wednesday, August 20th
常用占位符:
%Y
:四位年份 %y
:两位年份 %m
:数字月份(01-12) %c
:不补零月份(1-12) %H
:24小时制 %h
:12小时制 SELECT STR_TO_DATE('08/20/2025', '%m/%d/%Y'); -- 输出:2025-08-20 -- 处理混乱的日志时间 SELECT STR_TO_DATE('Aug 20, 2025 3PM', '%b %d, %Y %l%p');
⚠️ 注意:格式必须严格匹配,否则返回NULL
!
-- 时间戳转时间 SELECT FROM_UNIXTIME(1692538200); -- 输出:2025-08-20 15:30:00 -- 时间转时间戳 SELECT UNIX_TIMESTAMP('2025-08-20 15:30:00');
-- 将UTC时间转东京时间 SELECT CONVERT_TZ('2025-08-20 08:00:00', '+00:00', '+09:00'); -- 输出:2025-08-20 17:00:00
-- 获取当前小时 SELECT HOUR(NOW()); -- 计算两个日期差值(天数) SELECT DATEDIFF('2025-08-25', '2025-08-20'); -- 输出:5
时区陷阱:
TIMESTAMP
存数据时会转UTC,取数据时转回连接时区 SET time_zone = '+08:00'
统一时区设置 性能优化:
-- ❌ 低效写法(无法用索引) SELECT * FROM orders WHERE DATE_FORMAT(create_time,'%Y-%m')='2025-08'; -- ✅ 高效写法 SELECT * FROM orders WHERE create_time BETWEEN '2025-08-01' AND '2025-08-31';
千年虫再现:
%y
会解释为1970-2069,建议始终用%Y
-- 按周统计2025年8月销售额 SELECT DATE_FORMAT(order_time, '%Y-%U') AS week, SUM(amount) AS total_sales FROM orders WHERE order_time BETWEEN '2025-08-01' AND '2025-08-31' GROUP BY week;
输出结果:
+---------+-------------+
| week | total_sales |
+---------+-------------+
| 2025-31 | 12000.00 |
| 2025-32 | 18500.50 |
+---------+-------------+
🎯 总结:掌握MySQL时间函数就像获得时间宝石,能让你:
下次遇到时间问题,试试这些魔法般的函数吧!⏳✨
本文由 成梧 于2025-08-02发表在【云服务器提供商】,文中图片由(成梧)上传,本平台仅提供信息存储服务;作者观点、意见不代表本站立场,如有侵权,请联系我们删除;若有图片侵权,请您准备原始证明材料和公证书后联系我方删除!
本文链接:https://vps.7tqx.com/wenda/510197.html
发表评论