私は特にMySQLを使用していますが、私はクロスベンダーのソリューションを期待しています。私は各レコードの列としてタイムスタンプを追加するために、NOW()関数を使用しています。過去24時間以内にデータベーステーブルに追加されたレコードを検索するにはどうすればよいですか?
INSERT INTO messages
(typeId, messageTime, stationId, message)
VALUES
(?, NOW(), ?, ?)
私は特にMySQLを使用していますが、私はクロスベンダーのソリューションを期待しています。私は各レコードの列としてタイムスタンプを追加するために、NOW()関数を使用しています。過去24時間以内にデータベーステーブルに追加されたレコードを検索するにはどうすればよいですか?
INSERT INTO messages
(typeId, messageTime, stationId, message)
VALUES
(?, NOW(), ?, ?)
SELECT * FROM messages WHERE DATE_SUB(CURDATE(),INTERVAL 1 DAY) <= messageTime
SQL Serverのクエリは次のとおりです。交差データベースソリューションはありません私の知る限り(未テスト!)MySQLの同等のものを言うことができるように
Select *
From Messages
Where MessageTime > DateAdd(dd, -1, GetDate())
Select *
From Messages
Where MessageTime > ADDDATE(NOW(), INTERVAL -1 DAY)
ですそれらのほとんどは独自の日付処理(および主に区間表現)の構文と意味を持ちます。
PostgreSQL
で
それはSybase SQL Anywhereのために
SELECT * FROM messages WHERE messagetime >= messagetime - interval '1 day'
次のようになります。
Oracleの場合Select * From Messages Where MessageTime > dateadd(day, -1, now())
SELECT * FROM messages WHERE messageTime > SYSDATE - 1
(擬似変数SYSDATEは時間が含まれるため、SYSDATE -1あなたに最後の24時間を与えるでしょう)
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));
。
この構文はどのベンダーが機能しますか? –
http://dev.mysql.com/doc/refman/5.0/en/date-and-time-functions.html –
すべてのデータベースには、残念ながら現在の日付を取得するための独自の機能があります。 – jodonnell