2008-09-12 21 views

cevap

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

Bu sözdizimi hangi satıcıda çalışır? –

+0

http://dev.mysql.com/doc/refman/5.0/en/date-and-time-functions.html –

+0

Her veritabanı, maalesef geçerli tarihi almak için kendi işlevine sahiptir. – jodonnell

2

SQL Server sorgu: hayır çapraz veritabanı çözümü yoktur Bildiğim kadarıyla (denenmemiş!) MySQL eşdeğer söyleyebilirim

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

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

olduğunu Çoğu, kendi tarih işleme (ve çoğunlukla aralık gösterimi) sözdizimi ve semantiği vardır.

PostgreSQL olarak

bu yerde Sybase, SQL için

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

olacaktır:

Oracle için
Select * From Messages Where MessageTime > dateadd(day, -1, now()) 
1

SELECT * FROM messages WHERE messageTime > SYSDATE - 1 

(pseudo değişken SYSDATE süresi içerir, bu sysdate -1 son 24 saat verir

0

Buna API tabanlı bir istemciden erişiyorsanız (sanırım sorgudaki '?' Lerden kaynaklanıyor gibi), bunu SQL'den ziyade programınızdan yapabilirsiniz.

Not: Geri kalanlar JDBC sözdizimi içindir, diğer API'ler/diller farklı sözdizimi olacak, ancak kavramsal olarak aynı olmalıdır. insert tarafında

sorgu tarafında
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); 

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

taşınabilir şekilde çalışması gerektiğini.

İlgili konular