MySQL查询昨天、一周前、一月前及一年前的数据方法

Finn
Finn
发布时间:2026-10-14 | 4人浏览过
原创

本文介绍如何在MySQL中高效查询昨天、上周、上月及去年的数据。根据时间字段的存储格式(标准日期或Unix时间戳),分别演示了利用DATE_SUB和UNIX_TIMESTAMP函数的正确SQL写法,帮助快速定位不同时间维度的历史数据。

使用标准日期格式查询

当数据库中的时间字段(如 inputtime)存储为 DATETIME 或 DATE 格式时,可以使用 DATE_SUB() 函数结合 CURDATE()(当前日期)来计算相对时间点。这种方法逻辑清晰,且能直接利用索引(如果字段有索引)。

第1步:查询昨天的数据

目的:获取从昨天开始至今的数据记录。

  • 入口:SELECT 语句中的 WHERE 子句。
  • 动作:使用 DATE_SUB(CURDATE(), INTERVAL 1 DAY) 计算昨天的日期。
  • 重要参数:INTERVAL 1 DAY 表示向前推一天。
  • 完成状态:查询结果包含所有大于等于昨天零点的时间戳记录。
SELECT * FROM table_name 
WHERE inputtime >= DATE_SUB(CURDATE(), INTERVAL 1 DAY);

第2步:查询一周前的数据

目的:获取从七天前开始的数据。

  • 入口:WHERE 条件。
  • 动作:将间隔改为 INTERVAL 1 WEEK。
  • 注意:MySQL中 1 WEEK 等同于 7 DAY。
SELECT * FROM table_name 
WHERE inputtime >= DATE_SUB(CURDATE(), INTERVAL 1 WEEK);

第3步:查询一个月前的数据

目的:获取上个月内至今的所有数据。

  • 动作:使用 INTERVAL 1 MONTH。
SELECT * FROM table_name 
WHERE inputtime >= DATE_SUB(CURDATE(), INTERVAL 1 MONTH);

第4步:查询一年前的数据

目的:获取去年内至今的数据。

  • 动作:使用 INTERVAL 1 YEAR。
SELECT * FROM table_name 
WHERE inputtime >= DATE_SUB(CURDATE(), INTERVAL 1 YEAR);

处理UNIX时间戳格式

如果数据库中的时间字段以 BIGINT 或 INT 类型的 UNIX 时间戳形式存放,上述直接比较日期的方法将失效,因为 DATE_SUB() 返回的是格式化后的字符串或日期对象,无法与数字时间戳直接比较。此时需要先将计算出的目标日期转换回时间戳。

第5步:时间戳字段的标准查询方案

目的:在时间戳存储模式下,实现相同的时间范围过滤。

  • 入口:WHERE 条件。
  • 动作:使用 UNIX_TIMESTAMP() 包裹 DATE_SUB() 的表达式,将计算出的日期转为时间戳进行比较。
  • 重要参数确保括号匹配:UNIX_TIMESTAMP(DATE_SUB(...))。
-- 昨天
WHERE inputtime >= UNIX_TIMESTAMP(DATE_SUB(CURDATE(), INTERVAL 1 DAY))

-- 一周前
WHERE inputtime >= UNIX_TIMESTAMP(DATE_SUB(CURDATE(), INTERVAL 1 WEEK))

-- 一月前
WHERE inputtime >= UNIX_TIMESTAMP(DATE_SUB(CURDATE(), INTERVAL 1 MONTH))

-- 一年前
WHERE inputtime >= UNIX_TIMESTAMP(DATE_SUB(CURDATE(), INTERVAL 1 YEAR))

相关日期函数补充说明

除了上述查询方法,以下函数在处理 MySQL 日期时也经常用到:

  • CURDATE() / CURRENT_DATE():返回当前日期(无时分秒),适合只关注日期的场景。
  • NOW() / SYSDATE():返回当前日期和时间(精确到秒),适合需要精确时间点的场景。
  • UNIX_TIMESTAMP(date):将日期/时间转换为 Unix 时间戳。
  • FROM_UNIXTIME(timestamp):将 Unix 时间戳转换为标准的 MySQL 日期格式。
  • DATE_SUB(date, INTERVAL expr type):从日期减去指定的时间间隔。type 可以是 DAY, WEEK, MONTH, YEAR 等。

通过以上方法,可以根据数据表的实际存储结构,灵活选择最合适的 SQL 写法来获取指定时间段内的数据。以上就是MySQL查询指定时间段数据的详细内容,更多关于MySQL日期函数的技巧请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表