我的sqlite原始查询需要能够根据它们到现在的距离来对日期进行排序。我的sqlite语句有什么问题?
public Cursor GetFirstTime(){
Calendar c = Calendar.getInstance();
int seconds = c.get(Calendar.MILLISECOND);
SQLiteDatabase sqLiteDatabase = this.getWritableDatabase();
Cursor nextTime = sqLiteDatabase.rawQuery("select * from timemanager_table where " + seconds + " >= dateday ORDER BY dateday Limit 5",null);
return nextTime;
}
最佳答案
假设dateday
是秒,那么您可以完全使用SQL来完成此操作(不需要Java日历)。
该查询说找到现在之前的前5个元素。
SELECT *
FROM timemanager_table
WHERE dateday <= strftime('%s', 'now')
ORDER BY dateday DESC
LIMIT 5
换句话说,请参见SQLite Date & Time functions
如果
dateday
采用其他格式(例如YYYY-MM-DD
),则可能需要strftime
。如果您需要基于“到现在为止”进行排序,则需要进行一些日期减去。
SELECT *, dateday - strftime('%s', 'now') AS time_diff
FROM timemanager_table
ORDER BY time_diff DESC
LIMIT 5
这将添加一个附加列,其中以前的值为负,现在为0,将来的值为正。