news 2026/5/26 12:30:19

MySQL timestamp

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
MySQL timestamp

TL’DR

  • 经常使用的字段,加上索引
  • 尽量不要对字段进行函数运算

在 MySQL 中比较 timestamp 和固定时间有几种常用方法:

1. 直接比较(推荐)

-- 比较是否大于某个时间SELECT*FROMtable_nameWHEREtimestamp_column>'2024-01-01 10:30:00';-- 比较是否在某个时间范围内SELECT*FROMtable_nameWHEREtimestamp_columnBETWEEN'2024-01-01 00:00:00'AND'2024-12-31 23:59:59';-- 比较是否等于某个时间SELECT*FROMtable_nameWHEREtimestamp_column='2024-01-01 10:30:00';

2. 使用 UNIX_TIMESTAMP 函数

-- 转换为 Unix 时间戳比较SELECT*FROMtable_nameWHEREUNIX_TIMESTAMP(timestamp_column)>UNIX_TIMESTAMP('2024-01-01 10:30:00');-- 或者直接用数字(秒数)SELECT*FROMtable_nameWHEREUNIX_TIMESTAMP(timestamp_column)>1704081000;

3. 使用 DATE/DATETIME 函数

-- 只比较日期部分SELECT*FROMtable_nameWHEREDATE(timestamp_column)='2024-01-01';-- 使用 STR_TO_DATE 转换字符串SELECT*FROMtable_nameWHEREtimestamp_column>STR_TO_DATE('2024-01-01 10:30:00','%Y-%m-%d %H:%i:%s');

4. 常用比较场景

-- 查询最近24小时的数据SELECT*FROMtable_nameWHEREtimestamp_column>NOW()-INTERVAL24HOUR;-- 查询今天的数据SELECT*FROMtable_nameWHEREDATE(timestamp_column)=CURDATE();-- 查询本周的数据SELECT*FROMtable_nameWHEREYEARWEEK(timestamp_column)=YEARWEEK(NOW());-- 查询指定时间之后的数据SELECT*FROMtable_nameWHEREtimestamp_column>='2024-01-01 00:00:00';

注意事项:

  1. 时区问题:TIMESTAMP 类型会根据数据库时区自动转换,确保你的固定时间是在正确的时区
  2. 格式:MySQL 接受'YYYY-MM-DD HH:MM:SS'格式的字符串
  3. 性能:直接比较(方法1)通常性能最好,能利用索引
  4. 函数使用:在 WHERE 子句中对列使用函数(如 DATE())会导致无法使用索引,影响性能

最常用和推荐的方式是方法1,直接使用字符串格式比较,简单且高效。

要查询 MySQL 中最近三个月的created_at数据(timestamp 格式),可以使用以下几种方法:

1. 使用 INTERVAL(最常用)

-- 查询最近3个月的数据SELECT*FROMtable_nameWHEREcreated_at>=NOW()-INTERVAL3MONTH;-- 或使用 DATE_SUBSELECT*FROMtable_nameWHEREcreated_at>=DATE_SUB(NOW(),INTERVAL3MONTH);-- 更精确:从今天往前推3个月SELECT*FROMtable_nameWHEREcreated_at>=CURDATE()-INTERVAL3MONTH;

2. 指定具体时间范围

-- 最近3个月到现在SELECT*FROMtable_nameWHEREcreated_atBETWEENDATE_SUB(NOW(),INTERVAL3MONTH)ANDNOW();-- 只计算完整的月份(例如:如果现在是 12-31,查询 10-01 到 12-31)SELECT*FROMtable_nameWHEREcreated_at>=DATE_FORMAT(NOW()-INTERVAL3MONTH,'%Y-%m-01');

3. 使用 TIMESTAMPDIFF(更灵活)

-- 查询距离现在不超过3个月的数据SELECT*FROMtable_nameWHERETIMESTAMPDIFF(MONTH,created_at,NOW())<=3;

4. 实际应用示例

-- 统计最近3个月的记录数SELECTCOUNT(*)FROMtable_nameWHEREcreated_at>=NOW()-INTERVAL3MONTH;-- 按月分组统计最近3个月数据SELECTDATE_FORMAT(created_at,'%Y-%m')asmonth,COUNT(*)ascountFROMtable_nameWHEREcreated_at>=NOW()-INTERVAL3MONTHGROUPBYDATE_FORMAT(created_at,'%Y-%m')ORDERBYmonth;-- 最近3个月,按日期倒序排列SELECT*FROMtable_nameWHEREcreated_at>=NOW()-INTERVAL3MONTHORDERBYcreated_atDESC;

推荐方案:

SELECT*FROMtable_nameWHEREcreated_at>=NOW()-INTERVAL3MONTH;

这个查询会:

  • ✅ 自动计算从当前时间往前推 3 个月
  • ✅ 包含时分秒,更精确
  • ✅ 可以利用 created_at 上的索引(如果有)
  • ✅ 简单易读

注意:如果created_at列上有索引,确保不要在列上使用函数(如DATE(created_at)),否则会导致索引失效。

如果created_at存储的是 Unix 时间戳(数字格式),可以这样查询:

1. 直接比较时间戳数字(最高效)

-- 查询最近3个月的数据SELECT*FROMtable_nameWHEREcreated_at>=UNIX_TIMESTAMP(NOW()-INTERVAL3MONTH);-- 或者直接计算秒数(3个月约等于 7776000 秒)SELECT*FROMtable_nameWHEREcreated_at>=UNIX_TIMESTAMP()-(3*30*24*60*60);

2. 使用 FROM_UNIXTIME 转换后比较

-- 将时间戳转换为日期时间后比较SELECT*FROMtable_nameWHEREFROM_UNIXTIME(created_at)>=NOW()-INTERVAL3MONTH;-- 注意:这种方式会影响索引性能

3. 推荐方案(性能最好)

-- 计算3个月前的时间戳,直接比较数字SELECT*FROMtable_nameWHEREcreated_at>=UNIX_TIMESTAMP(DATE_SUB(NOW(),INTERVAL3MONTH));

4. 实际示例

-- 查询最近3个月的数据,按时间倒序SELECT*,FROM_UNIXTIME(created_at)asreadable_timeFROMtable_nameWHEREcreated_at>=UNIX_TIMESTAMP(NOW()-INTERVAL3MONTH)ORDERBYcreated_atDESC;-- 按月统计最近3个月的数据SELECTDATE_FORMAT(FROM_UNIXTIME(created_at),'%Y-%m')asmonth,COUNT(*)ascountFROMtable_nameWHEREcreated_at>=UNIX_TIMESTAMP(NOW()-INTERVAL3MONTH)GROUPBYDATE_FORMAT(FROM_UNIXTIME(created_at),'%Y-%m')ORDERBYmonth;

性能对比:

-- ✅ 好:在 WHERE 中不对列使用函数,可以利用索引WHEREcreated_at>=UNIX_TIMESTAMP(NOW()-INTERVAL3MONTH)-- ❌ 差:对列使用函数会导致索引失效WHEREFROM_UNIXTIME(created_at)>=NOW()-INTERVAL3MONTH

最佳实践:

SELECT*FROMtable_nameWHEREcreated_at>=UNIX_TIMESTAMP(NOW()-INTERVAL3MONTH);

优势

  • ✅ 数字比较速度快
  • ✅ 可以利用 created_at 索引
  • ✅ 精确计算3个月
  • ✅ 语义清晰

注意UNIX_TIMESTAMP()返回的是秒级时间戳。如果你的created_at是毫秒级时间戳,需要乘以 1000:

WHEREcreated_at>=UNIX_TIMESTAMP(NOW()-INTERVAL3MONTH)*1000
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/12 17:16:36

YOLOv8高级培训课程报名开启

YOLOv8 高效视觉开发实战&#xff1a;从模型到部署的全链路解析 在智能摄像头遍布工厂车间、自动驾驶车辆穿梭城市道路的今天&#xff0c;目标检测早已不再是实验室里的概念玩具。它正以惊人的速度重塑着工业质检、安防监控、智慧交通等关键领域。而在这场视觉革命中&#xff0…

作者头像 李华
网站建设 2026/5/22 14:36:11

screen命令在服务器运维中的最佳实践完整示例

用好screen&#xff0c;告别断连焦虑&#xff1a;Linux 运维中的会话守护神实战指南你有没有过这样的经历&#xff1f;深夜正在远程部署一个关键服务&#xff0c;脚本跑了十分钟眼看着快要完成&#xff0c;突然 Wi-Fi 断了——再连上去时&#xff0c;SSH 会话已死&#xff0c;进…

作者头像 李华
网站建设 2026/5/14 22:43:46

YOLOv8 Telegram Bot远程控制训练进度

YOLOv8 Telegram Bot远程控制训练进度 在现代深度学习项目中&#xff0c;模型训练往往需要数小时甚至数天。开发者常常面临一个尴尬的现实&#xff1a;必须守在电脑前查看日志、等待结果&#xff0c;或者冒着错过异常崩溃的风险离开。尤其是在使用云服务器或远程GPU集群时&…

作者头像 李华
网站建设 2026/5/23 6:25:43

YOLOv8 Jupyter Notebook使用技巧:交互式调试模型

YOLOv8 Jupyter Notebook使用技巧&#xff1a;交互式调试模型 在现代计算机视觉研发中&#xff0c;一个常见的困境是&#xff1a;算法工程师花费大量时间在环境配置、依赖冲突和调试低效上&#xff0c;而不是真正专注于模型优化。尤其是在目标检测领域&#xff0c;尽管YOLO系列…

作者头像 李华
网站建设 2026/5/24 20:03:21

智能需求变更影响范围分析:全面评估修改成本

智能需求变更影响范围分析:全面评估修改成本关键词&#xff1a;智能需求变更、影响范围分析、修改成本评估、软件开发、需求管理摘要&#xff1a;在软件开发过程中&#xff0c;需求变更不可避免。智能需求变更影响范围分析及全面评估修改成本对于项目的成功实施至关重要。本文将…

作者头像 李华
网站建设 2026/5/13 19:04:49

数字电路在光纤收发器中的逻辑设计:全面讲解

数字电路如何“掌管”光纤收发器&#xff1f;从编码到状态机的深度拆解你有没有想过&#xff0c;当你在视频会议中流畅通话、在云端备份海量文件时&#xff0c;背后真正支撑这一切的是什么&#xff1f;答案可能藏在一块比指甲盖还小的模块里——光纤收发器。它负责将电信号变成…

作者头像 李华