2008-09-12 78 views

回答

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

哪个供应商执行此语法工作? – 2008-09-12 16:29:01

2

SQL Server查询是:

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

据我可以告诉(未经测试!)MySQL的等价物是

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

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

PostgreSQL这将是

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

对于Sybase SQL Anywhere的:

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

对于Oracle

SELECT * FROM messages WHERE messageTime > SYSDATE - 1 

(该伪变量SYSDATE包括时间,所以SYSDATE -1会给你最后24小时)

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)); 

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

相关问题