如何查找过去24小时内添加到数据库表中的记录?
时间:2020-03-05 18:52:21 来源:igfitidea点击:
我特别使用MySQL,但我希望有一个跨供应商的解决方案。我正在使用NOW()函数为每个记录添加时间戳作为列。
INSERT INTO messages (typeId, messageTime, stationId, message) VALUES (?, NOW(), ?, ?)
解决方案
回答
SELECT * FROM messages WHERE DATE_SUB(CURDATE(),INTERVAL 1 DAY) <= messageTime
回答
SQL Server查询为:
Select * From Messages Where MessageTime > DateAdd(dd, -1, GetDate())
据我所知(未试过!)MySQL等效项是
Select * From Messages Where MessageTime > ADDDATE(NOW(), INTERVAL -1 DAY)
回答
没有跨数据库解决方案,因为它们大多数都有自己的日期处理(主要是间隔表示)语法和语义。
在PostgreSQL
中
SELECT * FROM messages WHERE messagetime >= messagetime - interval '1 day'
回答
对于Sybase SQL Anywhere:
Select * From Messages Where MessageTime > dateadd( day, -1, now() )
回答
对于Oracle
SELECT * FROM messages WHERE messageTime > SYSDATE - 1
(伪变量SYSDATE包含时间,因此sysdate -1将为我们提供最近的24小时)
回答
如果我们是从基于API的客户端访问此文件(我猜是这种情况,因为查询中有"?"),则可以从程序中执行此操作,而不是通过SQL。
注意:其余部分用于JDBC语法,其他API /语言将是不同的语法,但在概念上应相同。
在插入侧
PreparedStatement stmt = connection.prepareStatement( "INSERT INTO messages " + "(typeId, messageTime, stationId, message) VALUES " + "(?, ?, ?, ?)" ); stmt.setInt(1, typeId); stmt.setDate(2, new java.sql.Date(System.currentTimeMillis())); stmt.setInt(3, stationId); stmt.setString(4, message);
在查询方面,请执行以下操作:
PrepatedStatement stmt = connection.prepareStatement( "SELECT typeId, messageTime, stationId, message " + "from messages where messageTime < ?"); long yesterday = System.currentTimeMillis() - 86400000; // 86400 sec/day stmt.setDate(1,new java.sql.Date(yesterday));
那应该以可移植的方式工作。