sqlite查询当前时间和时间戳

时间:2012-10-27 14:09:42

标签: java sql database sqlite

我的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');

我回到数据库的每一行。

2 个答案:

答案 0 :(得分:2)

假设timeofcall位于a format that SQLite understands,请使用:

... WHERE timeofcall >= datetime('now', '-1 minutes')

答案 1 :(得分: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();

通过这种方式,您可以在任何类型的基于时间的查询中获得充分的灵活性。