我的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,将来的值为正。

09-27 15:28