本文以 MySQL 5.7 为例,事先创建一张 t_uuid_data 的数据表,表结构如下:
CREATE TABLE `t_uuid_data` ( `id` int(11) NOT NULL AUTO_INCREMENT, `uuid` varchar(50) DEFAULT NULL, `create_date` datetime DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
创建一个存储过程 generator_data,使用该过程生成数据。过程代码:
CREATE DEFINER=`root`@`%` PROCEDURE `generator_data`() BEGIN #Routine body goes here... DECLARE i INT DEFAULT 0; DECLARE UUID VARCHAR(50) DEFAULT ''; simple_loop: LOOP SET i = i + 1; SELECT REPLACE(RAND(),'.','') INTO UUID; INSERT INTO `t_uuid_data`(`uuid`, `create_date`) VALUES (UUID, DATE_SUB(CURDATE(), INTERVAL i DAY)); IF i = 1000 THEN LEAVE simple_loop; END IF; END LOOP simple_loop; END
调用存储过程:
call generator_data();
示例数据如下:
INSERT INTO `t_uuid_data`(`id`, `uuid`, `create_date`) VALUES (10179, '02008538322531188', '2022-08-12 00:00:00'); INSERT INTO `t_uuid_data`(`id`, `uuid`, `create_date`) VALUES (10180, '0471891535885531', '2022-08-11 00:00:00'); INSERT INTO `t_uuid_data`(`id`, `uuid`, `create_date`) VALUES (10181, '07568962134019437', '2022-08-10 00:00:00'); INSERT INTO `t_uuid_data`(`id`, `uuid`, `create_date`) VALUES (10182, '036880649008677013', '2022-08-09 00:00:00'); -- ... more ...
(1)查询5分钟前的数据
select * from t_uuid_data where create_date between date_add(now(), interval -300 SECOND) and now()
其中,date_add 方法用来执行日期加法运算,点击查看详情。
上面语句利用 data_add 在当前时间的基础上减去5分钟(300秒),然后进行 between 运算。
(2)查询当天的所有数据
SELECT * FROM t_uuid_data WHERE DATEDIFF(create_date, now()) = 0
其中,datediff 方法用来计算两个日期之间间隔天数,点击查看详情
(3)查询昨天的所有数据
SELECT * FROM t_uuid_data WHERE datediff(create_date, now())=-1
(4)查询未来第N天的所有数据,例如:查询未来第5天的数据
SELECT * FROM t_uuid_data WHERE DATEDIFF(create_date, NOW())=5
(5)查询未来N天内所有数据,例如:查询未来5天内的所有数据
-- 包含今天 SELECT * FROM t_uuid_data WHERE DATEDIFF(create_date,NOW()) < 5 AND DATEDIFF(create_date,NOW())>=0 -- 不包含今天 SELECT * FROM t_uuid_data WHERE DATEDIFF(create_date,NOW()) <= 5 AND DATEDIFF(create_date,NOW())>0
(6)查询过去N天内所有数据
-- 查询过去5天内的数据,包含当天 SELECT * FROM t_uuid_data WHERE DATEDIFF(create_date,NOW())<=0 AND DATEDIFF(create_date,NOW())>-5 -- 查询过去5天内的数据,不包含当天 SELECT * FROM t_uuid_data WHERE DATEDIFF(create_date,NOW())<0 AND DATEDIFF(create_date,NOW())>=-5
(7)只获取今天的数据
select * from t_uuid_data where to_days(create_date) = to_days(now());
其中,to_days 返回指定日期自 0 年以来的天数,点击查看详情。
(8)只获取昨天的数据
SELECT * FROM t_uuid_data WHERE TO_DAYS(NOW()) - TO_DAYS(create_date) = 1
(9)获取近7天的数据
SELECT * FROM t_uuid_data where create_date >= DATE_SUB(CURDATE(), INTERVAL 7 DAY)
其中,DATE_SUB 函数用来执行日期减法运算,点击查看详情。
(10)获取近30天的数据
SELECT * FROM t_uuid_data where DATE_SUB(CURDATE(), INTERVAL 30 DAY) <= date(create_date)
(11)获取本月的数据
SELECT * FROM t_uuid_data WHERE DATE_FORMAT(create_date, '%Y%m') = DATE_FORMAT(CURDATE(), '%Y%m')
其中,DATE_FORMAT 函数用来格式化指定的日期,点击查看详情。
(11)获取上一月的数据
SELECT * FROM t_uuid_data WHERE PERIOD_DIFF(date_format(now(), '%Y%m'), date_format(create_date,'%Y%m'))=1
其中,PERIOD_DIFF 返回两个日期之间的月数,点击查看详情。
(12)获取本季度数据
select * from t_uuid_data where QUARTER(create_date)=QUARTER(now());
其中,QUARTER 返回指定日期的一年中的季度,范围为 1 到 4,点击查看详情。
(13)获取上季度数据
select * from t_uuid_data where QUARTER(create_date)=QUARTER(DATE_SUB(now(), interval 1 QUARTER));
(14)获取本年数据
select * from t_uuid_data where YEAR(create_date)=YEAR(NOW());
(15)获取上年数据
select * from t_uuid_data where year(create_date)=year(date_sub(now(),interval 1 year));
(16)获取当前这周的数据
SELECT * FROM t_uuid_data WHERE YEARWEEK(date_format(create_date,'%Y-%m-%d')) = YEARWEEK(now());
(17)获取上周的数据
SELECT * FROM t_uuid_data WHERE YEARWEEK(date_format(create_date,'%Y-%m-%d')) = YEARWEEK(now())-1;
(18)获取上个月的数据
select * FROM t_uuid_data where date_format(create_date,'%Y-%m')=date_format(DATE_SUB(curdate(), INTERVAL 1 MONTH),'%Y-%m')
(19)获取当前月份的数据
select * from t_uuid_data where date_format(create_date,'%Y-%m')=date_format(now(),'%Y-%m')
(20)获取距离当前现在6个月的数据
select * from t_uuid_data where create_date between date_sub(now(), interval 6 month) and now();