0

我的 sqlite3 数据库中有一个表,其中包含以下字段:

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

时间戳基本上是插入的时间(在我的应用程序中,当有人打电话时,它会插入电话号码以及通话时间。)

我想在最后一分钟内获取特定数字的所有行,例如:

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

假设这timeofcallSQLite 可以理解的格式,请使用:

... 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 回答