第一种
建一个表,插入连续的时间,然后查询出对应表之间的数据
第二种 找个很大的表执行下面的语句
比如说我要查询2018-01-10到2018-01-20每天的数据,那么就可以写成
SELECT @cdate := DATE_ADD(@cdate, INTERVAL +1 DAY) cday
FROM( SELECT @cdate := DATE_ADD('2018-01-10', INTERVAL -1 DAY) FROM data_t limit 15) t0
WHERE date(@cdate) <= DATE_ADD('2018-01-20', INTERVAL -1 DAY)
注意:data_t 可以是任意表但是 表存在的表的数据必须大于日期之间的数据量
如果小于会显示日期会不全的
第三种 使用缓存表
创建一个存储过程,不同于以上的例子,这个可以直接在调用的时候给时间范围。对于日期范围需要和用户交互,需要灵活更改的,这个方法更加适用
DELIMITER $$
DROP PROCEDURE IF EXISTS create_calendar $$
CREATE PROCEDURE create_calendar (s_date DATE, e_date DATE)
BEGIN
SET @createSql = 'CREATE TABLE IF NOT EXISTS calendar (
`date` date NOT NULL,
UNIQUE KEY `unique_date` (`date`) USING BTREE
)ENGINE=InnoDB DEFAULT CHARSET=utf8';
prepare stmt from @createSql;
execute stmt;
WHILE s_date <= e_date DO
INSERT IGNORE INTO calendar VALUES (DATE(s_date)) ;
SET s_date = s_date + INTERVAL 1 DAY ;
END WHILE ;
END$$
DELIMITER ;
CALL create_calendar ('2018-03-01', '2018-12-30');