0

次のフィールドを持つ sqlite3 データベースにテーブルがあります。

id text not null, phonenum text not null, timeofcall text not null

タイムスタンプは基本的に挿入の時間です (私のアプリでは、人が電話をかけると、電話番号と電話の時間も挿入されます)。

次のような最後の 1 分間に特定の番号のすべての行を取得したい:

SELECT * FROM callstbl WHERE phonenum = '07857463756' AND timeofcall < 1 minute ago;

このようなことはどのように達成されますか?

編集:

トップポスターの提案としてこのクエリを使用すると、「phonenum」に一致するすべての行が返されます。これは、時間関数を無視するようなものです

String sql = "select * FROM callstbl WHERE timeofcall >= datetime('now', '-1 minutes') AND phonenum='"+num+"'";

日時文字列 (timeofcall) の形式は yyyy-MM-dd HH:mm:ss です

もし私がするなら

SELECT * FROM callstbl WHERE timeofcall >= datetime('now', '-1 minutes');

データベースのすべての行を取得します。

4

2 に答える 2

2

timeofcallそれがSQLite が理解できる形式であると仮定すると、以下を使用します。

... WHERE timeofcall >= datetime('now', '-1 minutes')
于 2012-10-27T14:45:48.350 に答える
1

ミリ秒単位で時間を格納するテーブルにtimeOfCallMiliという列を作成することをお勧めします。このようにして、日付/時刻に基づいてクエリを実行するのがはるかに簡単になります。あなたのクエリは次のようになります

WHERE timeOfCallMili >= System.currentTimeMillis() - 60000 

または、7 日以内 (または特定の日付) のレコードを取得したい場合は、Calendar オブジェクトを使用してその日付/時刻を表すことができます。

Calendar queryTime = Calendar.getInstance(); //this instance gets the current date/time as default values
    queryTime.set(Calendar.DATE, queryTime.get(Calendar.DATE) - 7); //setting date to 7 days back
    queryTime.set(Calendar.HOUR, 0);    //setting time to 0, as its set to current time by default. 
    queryTime.set(Calendar.MINUTE, 0);

したがって、クエリは次のようになります

     WHERE timeOfCallMili >= queryTime.getTimeInMillis();

このようにして、あらゆるタイプの時間ベースのクエリで完全な柔軟性を得ることができます。

于 2012-10-27T17:00:58.960 に答える