vlambda博客
学习文章列表

Mysql实现查询5分钟之前的数据

在做交易项目的时候需要一个定时补偿来把交易异常失败但是能继续跑的交易继续跑下去,要求是拿到5分钟前的数据跑一次程序,逻辑比较简单,但是要求我们5分钟跑一次,那么我们我们定时五分钟的时候得考虑到拿到数据还得是五分钟前,时间还是yyyyMMddmmssSSS格式的,举例就是:

20200918112052362


乍一看好像不太好处理,那么我们可以先把字符串格式化,如下面的例子

注:不推荐使用SELECT  * 建议加上特定要查的字段,具体可以参考阿里巴巴开发手册

SELECT * FROM 表名 t WHERE 条件一 AND 条件二AND t.时间 <= CONCAT(date_format(DATE_SUB(NOW(), INTERVAL 5 MINUTE),'%Y%m%d%H%i%S'),'000')LIMIT 0, 1000 ORDER BY t.时间 DESC
这里我们的时间是yyyyMMddHHmmssSSS的字符串格式
如果是日期格式就可以把转字符串的去掉
如下:
SELECT * FROM 表名 t WHERE 条件一 AND 条件二AND t.时间 <= DATE_SUB(NOW(), INTERVAL 5 MINUTE)LIMIT 0, 1000 ORDER BY t.时间 DESC

如果是Oracle,举一个例子:

Oracle实现查询1小时之内的数据:

SELECT * FROM 表名 t WHERE 条件一 AND 条件二AND to_char(sysdate-1/24,'YYYYMMDDHH24') <t.time ORDER BY t.时间 DESC


这里我们的时间是yyyyMMddHHmmssSSS的字符串格式
以此类推
to_char(sysdate-1/48,‘YYYYMMDDHH24’) <t.time
就是半小时的