如何查找过去24小时内添加到数据库表中的记录?

时间:2008-09-12 16:21:07

标签: sql

我特别使用MySQL,但我希望有一个跨供应商的解决方案。我正在使用NOW()函数为每条记录添加时间戳作为列。

INSERT INTO messages 
(typeId, messageTime, stationId, message) 
VALUES 
(?, NOW(), ?, ?)

6 个答案:

答案 0 :(得分:4)

SELECT * FROM messages WHERE DATE_SUB(CURDATE(),INTERVAL 1 DAY) <= messageTime

答案 1 :(得分:2)

SQL Server查询是:

Select *
From Messages
Where MessageTime > DateAdd(dd, -1, GetDate())

据我所知(未经测试!)MySQL等价物是

Select *
From Messages
Where MessageTime > ADDDATE(NOW(), INTERVAL -1 DAY)

答案 2 :(得分:1)

对于Sybase SQL Anywhere:

Select * From Messages Where MessageTime > dateadd( day, -1, now() )

答案 3 :(得分:1)

对于Oracle

SELECT * FROM messages WHERE messageTime > SYSDATE - 1

(伪变量SYSDATE包含时间,因此sysdate -1将为您提供最后24小时)

答案 4 :(得分:0)

没有跨数据库解决方案,因为它们中的大多数都有自己的日期处理(主要是区间表示)语法和语义。

PostgreSQL中,它将是

SELECT * FROM messages WHERE messagetime >= messagetime - interval '1 day'

答案 5 :(得分:0)

如果您是从基于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));

这应该以便携的方式工作。

相关问题