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

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

本文介绍如何在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 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。