我的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');
我回到数据库的每一行。
答案 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();
通过这种方式,您可以在任何类型的基于时间的查询中获得充分的灵活性。