2008-09-12 81 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)); 

這應該在便攜式的方式工作。

相關問題