mysql 查询近一段时间数据(近一周、一个月、半年)和指定月数据或者指定一段时间数据的简单方法

查询近一段时间数据(近一周、一个月、半年、一年)

//查询一周
格式:select * from 表名称 where DATE_SUB(CURDATE(), INTERVAL 6 DAY) <= date(表内时间字段);
语句:select * from garbage_collect  where DATE_SUB(CURDATE(), INTERVAL 6 DAY) <= date(collection_time);

//查询一个月
 格式:select * from 表名称 where DATE_SUB(CURDATE(), INTERVAL 1 MONTH) <= date(表内时间字段);
 语句:select * from garbage_collect  where DATE_SUB(CURDATE(),  INTERVAL 1 MONTH) <= date(collection_time);

//查询近半年
格式:select * from 表名称 where DATE_SUB(CURDATE(),  INTERVAL 6 MONTH) <= date(表内时间字段);
语句:select * from garbage_collect  where DATE_SUB(CURDATE(),  INTERVAL 6 MONTH) <= date(collection_time);

查询指定时间段数据(开始时间-结束时间)–包含结束时间加DATE_ADD()函数:

格式:SELECT * FROM 表名称 WHERE 表字段 BETWEEN "开始时间" AND "结束时间";
语句:SELECT * FROM garbage_collect WHERE collection_time  BETWEEN "2020-02-01" AND "2020-03-31";

//查询指定时间段数据(开始时间-结束时间)包含结束时间
语句:SELECT * FROM garbage_collect WHERE  collection_time  BETWEEN "2020-03-17" AND DATE_ADD("2020-03-17",INTERVAL 1 DAY)

查询指定时间数据(年、月、日)

//查询2020年的数据:
格式:SELECT * FROM 表名称 WHERE year(表名称.表字段)="某年" 
语句:SELECT * FROM garbage_collect WHERE year(garbage_collect.collection_time)="2020" 
//查询9月份的数据:
格式:SELECT * FROM 表名称 WHERE year(表名称.表字段)="某月" 
语句:SELECT * FROM garbage_collect WHERE month(garbage_collect.collection_time)="09" 
//查询时期是08的数据:
格式:SELECT * FROM 表名称 WHERE year(表名称.表字段)="某日" 
语句:SELECT * FROM garbage_collect WHERE day(garbage_collect.collection_time)="08" 
//查询2020年03月份的数据:
SELECT * FROM garbage_collect WHERE year(garbage_collect.collection_time)="2020" and month(garbage_collect.collection_time)="03"
//查询2020年03月06日的数据:
SELECT * FROM garbage_collect WHERE year(garbage_collect.collection_time)="2020" and month(garbage_collect.collection_time)="03" AND DAY(garbage_collect.collection_time)="06";
### 如何使用 `timestamp` 获取一周前的数据 为了获取一周前的时间戳数据,可以通过 MySQL 的内置时间函数来完成此操作。以下是具体方法: #### 方法一:使用 `UNIX_TIMESTAMP` `DATE_SUB` 通过组合 `UNIX_TIMESTAMP` 函数 `DATE_SUB` 函数,可以计算出当前时间减去 7 天后的 Unix 时间戳。 ```sql SELECT UNIX_TIMESTAMP(DATE_SUB(CURDATE(), INTERVAL 7 DAY)) AS one_week_ago_timestamp; ``` 上述 SQL 查询会返回距今天起向前推 7 天的 Unix 时间戳[^1]。 --- #### 方法二:使用 `TIMESTAMPDIFF` 配合日期范围筛选 如果目标是从数据库中提取过去一周内的记录,则可利用 `TIMESTAMPDIFF` 或者直接比较时间字段与当前时间的关系。例如: ```sql SELECT * FROM your_table WHERE TIMESTAMPDIFF(WEEK, time_column, NOW()) = 0; ``` 这条语句的作用是选取那些发生在最一个星期之内的所有记录[^2]。 不过需要注意的是,这种方法适用于按周单位精确匹配的情况;对于更灵活的需求(比如包含部分重叠),推荐采用下面的方式定义区间条件: ```sql SELECT * FROM your_table WHERE time_column >= DATE_SUB(NOW(), INTERVAL 7 DAY) AND time_column <= NOW(); ``` 这里明确了时间段边界——即从七天之前到此刻为止的所有条目都会被检索出来。 --- #### PostgreSQL 实现方式 如果是基于 PostgreSQL 数据库环境执行相似的任务,那么应该考虑运用其特有的日期处理功能。例如,借助于 `CURRENT_DATE` 及相应的间隔运算符 `- interval '7 days'` 来达成相同效果: ```sql SELECT EXTRACT(EPOCH FROM (CURRENT_DATE - INTERVAL '7 DAYS'))::BIGINT AS start_of_last_week_ts; ``` 该表达式的结果是以秒计数的形式呈现的一周之前的时刻点[^3]。 --- ### 总结代码片段 最终解决方案如下所示: - **MySQL 版本** ```sql -- 计算一周前的时间戳 SELECT UNIX_TIMESTAMP(DATE_SUB(CURDATE(), INTERVAL 7 DAY)) AS one_week_ago_timestamp; -- 查找一周数据 SELECT * FROM your_table WHERE time_column BETWEEN DATE_SUB(NOW(), INTERVAL 7 DAY) AND NOW(); ``` - **PostgreSQL 版本** ```sql -- 计算一周前的时间戳 SELECT EXTRACT(EPOCH FROM (CURRENT_DATE - INTERVAL '7 DAYS'))::BIGINT AS start_of_last_week_ts; -- 查找一周数据 SELECT * FROM your_table WHERE time_column >= CURRENT_DATE - INTERVAL '7 DAYS'; ``` ---
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值