MySQL查询某一天的数据
某个场景下需要查询某一天的数据,例如2017/9/27这一天所有的数据量,有以下几个方法。select * from vote_log_data whereDATE_FORMAT(created_at,"%Y%m%d") ="20200409"select * from vote_log_data WHERE substring(Convert(char(10),created_at ,112),
·
经常会遇到,需要在数据库中查询某一天生成的数据,而数据库中存储的字段是以timestamp
格式。例如2017/9/27这一天所有的数据量,可以使用下几个方法
app_vote_log_data
表的结构如下
-- app_vote_log_data 表的结构
CREATE TABLE `app_vote_log_data` (
`id` bigint(10) unsigned NOT NULL AUTO_INCREMENT,
`player_id` int(11) unsigned NOT NULL DEFAULT '0',
`event_id` int(11) unsigned NOT NULL DEFAULT '0',
`openid` varchar(50) NOT NULL DEFAULT '0' COMMENT '用户openid',
`avatar` varchar(255) NOT NULL DEFAULT '' COMMENT '微信头像',
`nickname` varchar(255) CHARACTER SET utf8mb4 NOT NULL DEFAULT '' COMMENT '微信昵称',
`created_at` timestamp NULL DEFAULT NULL COMMENT '时间',
PRIMARY KEY (`id`) USING BTREE,
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;
-- 添加索引
ALTER TABLE ADD INDEX idx_create_at(`created_at`);
-- 方法一(索引idx_create_at范围查询),推荐
select * from vote_log_data WHERE created_at > '2020-04-09' and created_at < '2020-04-10'
-- 方法二(索引idx_create_at范围查询),推荐
select * from vote_log_data WHERE created_at between '2020-04-09 00:00:00' and '2020-04-09 23:59:59'
-- 方法三(索引失效)
select * from vote_log_data where DATE_FORMAT(created_at,"%Y%m%d") ="20200409"
-- 方法四(索引失效)
select * from vote_log_data WHERE substring(Convert(char(10),created_at ,112),1,8)='20200409'
-- 方法五(索引失效)
select * from vote_log_data WHERE year(created_at ) = 2017 and month(created_at )= 09 and day(created_at ) = 27
-- 方法六(索引失效)
select * from vote_log_data WHERE ( datediff ( created_at , '2020-04-09' ) = 0 )
如果表中的数据过大,可以把查询出来的数据查入到另一张一样结构的表中(vote_log_data_history
)
# 查询某天数据并查入到另一张表中
insert into vote_log_data_history select * from vote_log_data where DATE_FORMAT(created_at,"%Y%m%d") ="20200409"
在插入完成后,可以进行对账类的操作后,再对表中的数据进行删除即可
insert from vote_log_data where DATE_FORMAT(created_at,"%Y%m%d") ="20200409"
参考
[1] https://blog.csdn.net/qq_36743013/article/details/78115873
更多推荐
已为社区贡献4条内容
所有评论(0)