SQLite-net-pcl比较日期



如问题所述,我试图对在特定日期范围内完成的任务进行日期比较。

我的模型有一个布尔值叫做"Done"以及存储完成日期的字符串"DatesCompleted">

我目前有一个查询,显示我所有完成的项目限制在25,它工作得很好:

return db.QueryAsync<Tasks>("SELECT * FROM [Tasks] WHERE [Done] = 1 LIMIT 25");

我怎样才能只得到在今天之前7天完成的日期?这是sudo代码,我希望得到解决方案但我不知道如何在SQLite-net-pcl中写出来,

return db.QueryAsync<Tasks>("SELECT * FROM [Tasks] WHERE [Done] = 1 AND [DatesCompleted] >= (DateTime.Now - new TimeSpan(7,0,0,0))` LIMIT 25");

编辑:在尝试了第一个解决方案后,我运气不佳,无论完成时间如何,所有道具都出现了。我试过了:

foreach(var ii in TaskListDoneSource)
{
System.Diagnostics.Debug.WriteLine(ii.Name + " completed on : " + ii.DateCompleted + "  compared against " + (DateTime.Now-new TimeSpan(7,0,0,0)).ToString());
if (ii.DateCompleted > (DateTime.Now - new TimeSpan(7, 0, 0, 0)))
System.Diagnostics.Debug.WriteLine("The date completed has not quite hit 7 days");
}

IF语句告诉我,当我在7天内工作,但外面显然没有IF语句调用。所以这告诉我,我在第一个答案中推荐的查询中做错了:

SELECT * FROM [Tasks] WHERE [Done] = 1 AND [DateCompleted]>=Datetime ('now', '-7 day')

编辑2:我得到了它与提供的查询工作。唯一关闭的是将DateCompleted作为DateTime而不是在我的模型中正确格式化的字符串。(https://www.sqlite.org/lang_datefunc.html)

假设在[DatesCompleted]中您以ISO格式YYYY-MM-DD hh:mm:ss存储时间戳,那么在当前时间戳之前7天获得时间戳的正确SQLite语法是:

datetime('now', '-7 day')

或:

datetime('now', '-7 day', 'localtime')

所以你的查询应该是:

SELECT * 
FROM [Tasks] 
WHERE [Done] = 1 AND [DatesCompleted] >= datetime('now', '-7 day')

最新更新