2008-09-12 11 views
4

私は特にMySQLを使用していますが、私はクロスベンダーのソリューションを期待しています。私は各レコードの列としてタイムスタンプを追加するために、NOW()関数を使用しています。過去24時間以内にデータベーステーブルに追加されたレコードを検索するにはどうすればよいですか?

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

答えて

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

この構文はどのベンダーが機能しますか? –

+0

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

+0

すべてのデータベースには、残念ながら現在の日付を取得するための独自の機能があります。 – jodonnell

2

SQL Serverのクエリは次のとおりです。交差データベースソリューションはありません私の知る限り(未テスト!)MySQLの同等のものを言うことができるように

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

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

ですそれらのほとんどは独自の日付処理(および主に区間表現)の構文と意味を持ちます。

PostgreSQL

それはSybase SQL Anywhereのために

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

次のようになります。

Oracleの場合
Select * From Messages Where MessageTime > dateadd(day, -1, now()) 
1

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

関連する問題