2008-09-12 6 views

Répondre

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

Pour quel vendeur cette syntaxe fonctionne-t-elle? –

+0

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

+0

Chaque base de données a sa propre fonction pour obtenir la date actuelle, malheureusement. – jodonnell

2

La requête SQL Server est:

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

Pour autant que je peux dire (non testé!) Équivalent MySQL est

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

Il n'y a pas de solution de base de données multiplate , car la plupart d'entre eux ont leur propre syntaxe et sémantique de manipulation de date (et principalement de représentation d'intervalle).

En PostgreSQL il serait

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

Pour Sybase SQL Anywhere:

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

Pour Oracle

SELECT * FROM messages WHERE messageTime > SYSDATE - 1 

(La SYSDATE variable comprend psuedo le temps, donc sysdate -1 vous donnera les dernières 24 heures)

0

Si vous y accédez depuis un client basé sur API (je suppose que c'est le cas en raison des '?' Dans la requête), vous pouvez le faire depuis votre programme plutôt que par SQL.

Note: Le reste est pour la syntaxe JDBC, d'autres API/langues auront une syntaxe différente, mais devraient être conceptuellement les mêmes.

Du côté d'insertion font

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

Du côté de la requête ne:

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

Cela devrait fonctionner de manière portable.

Questions connexes