4

「タイムゾーンなしのタイムスタンプ」フィールドを持つ PostgreSQL テーブルがあります。ある時点で、このテーブルにクエリを実行すると、タイムスタンプがクエリの実行日と同じ日付内にあるレコードが必要になります。コードは次のとおりです。

 DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy/MM/dd HH:00:00");
 DateTime dt = new DateTime();
 String timeStampAsString = dt.toString(formatter);
 String select = "SELECT * FROM " + tableName + " WHERE " + tableName + ".timestamp >= '"+ timeStampAsString + "'";
 pst = dbConnection.prepareStatement(select);
 pst.execute();

ご覧のとおり、ここでは Joda を使用しています。また、別のポイントでそのテーブルにデータを入力しているので、形式は正しいです (yyyy/MM/dd HH:00:00)。String に変換する代わりに long をクエリに直接渡すことができるかどうかはよくわかりませんが、今のところ気になりません。

クエリ条件が "NOW" タイムスタンプよりも大きいため、これが何かを返す可能性はほとんどありません。必要なのは、「NOW」タイムスタンプと同じ日内にレコードを取得することです。上限と下限を要求する必要があると思いますが、このクエリの下限を計算する方法がわかりません...アイデアはありますか?

ありがとう!

4

2 に答える 2

0

私はこのようにします

long t1 = System.currentTimeMillis() / (24 * 3600 * 1000) * (24 * 3600 * 1000);
long t2 = t1 + 24 * 3600 * 1000;
String select = "SELECT * FROM " + tableName + " WHERE timestamp >= ? and timestamp < ?";
pst = dbConnection.prepareStatement(select);
pst.setTimestamp(1, new Timestamp(t1));
pst.setTimestamp(2, new Timestamp(t2));
...
于 2013-08-16T09:42:06.540 に答える