在使用数据库查询数据的时候有时候会要求查询过去某段时间的数据,比如过去一天、过去一周、过去一个月、过去一年等等。下面记录这种查询的实现方式。
数据表结构:
CREATE TABLE `tb_plant_data` (
`id` INT(11) NOT NULL AUTO_INCREMENT COMMENT 'id',
`plant_id` INT(11) NOT NULL COMMENT '植物id',
`plant_type` INT(11) NOT NULL COMMENT '植物品种',
`temperature` FLOAT NOT NULL COMMENT '温度',
`humidity` FLOAT NOT NULL COMMENT '湿度',
`sunshine` FLOAT NOT NULL COMMENT '光照',
`record_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
COMMENT '记录时间,默认为系统当前时间',
PRIMARY KEY (`id`)
)
这里注意一下,在最后一列中record_time的类型是TIMESTAMP,默认是系统当前时间。下面来实现分段时间查询。
在阅读实现方法之前可以参考一下mysql的与日期相关的函数:
可以参考:
http://www.w3school.com.cn/sql/sql_dates.asp
to_days( ) 方法
mysql 的to_day() 函数是从日期中获取当天对应的时间戳。
查询当天的数据
SELECT * FROM tb_plant_data
WHERE to_days(record_time) = to_days(now());
查询昨天的数据
SELECT * FROM tb_plant_data
WHERE to_days(record_time) - to_days(now()) = -1;
查询过去n天的数据
SELECT * FROM tb_plant_data
WHERE to_days(record_time) - to_days(now()) = -n;
直接使用DAY()
SELECT * FROM tb_plant_data WHERE DAY(record_time)= DAY(now());
yearweek(date)函数
返回的是日期在当前年的第几周。
查询上一周的数据
SELECT * FROM tb_plant_data
WHERE YEARWEEK(record_time)= YEARWEEK(now())-1;
查询上一个月的数据
SELECT * FROM tb_plant_data
WHERE MONTH(record_time)= MONTH(now())-1;
查询当年的数据
SELECT * FROM tb_plant_data
WHERE YEAR(record_time)= YEAR(now());