Sqlite查询获取接下来30天的行,(BETWEEN现在和现在+ 30天)

时间:2016-12-23 11:32:25

标签: android sqlite

假设您有一个包含以下列(全部整数)的表

taskId | day | month | year
------------------------
1      | 4    | 4     | 2016
1      | 3    | 5     | 2016
1      | 12   | 5     | 2016
1      | 30   | 5     | 2016

假设现在的日期是2016年4月4日 如何在Sqlite查询中获取从现在到接下来的30天之间的记录。  意味着,未来30天的任务。

所以结果应该是,

1      | 4    | 4     | 2016    << today is 4/4/2016
1      | 3    | 5     | 2016

感谢

2 个答案:

答案 0 :(得分:2)

要将这些列转换为SQLite的默认日期格式,请使用printf()

printf("%04d-%02d-%02d", year, month, day)

然后您可以使用内置日期功能:

SELECT *
FROM MyTable
WHERE printf(...) BETWEEN date('now') AND date('now', '+30 days');

答案 1 :(得分:1)

<强>第一

我必须说,与date合作可能会更好,或者也可以使用date.getTime返回long

从java方面你必须做这样的事情:

Caendar c = Calendar.getIstance();

int currentDay = c.get(Calendar.DAY_OF_MONTH);
int currentMonth = c.get(Calendar.MONTH) + 1; //it's 0 based
int currentYear = c.get(Calendar.YEAR);

c.add(Calendar.DAY_OF_MONTH, 30);
int nextMonthDay = c.get(Calendar.DAY_OF_MONTH);
int nextMonthMonth = c.get(Calendar.MONTH) + 1; //it's 0 based
int nextMonthYear = c.get(Calendar.YEAR);

String myQuery = String.Format("select * from myTable where (day >= {0} and month >= {1} and year >= {2}) and ( day < {3} and month <= {4} and year <= {5})", currentDay, currentMonth, currentYear, nextMonthDay, nextMonthMonth, nextMonthYear);

这将占用日期为&gt; =当前且日期为&lt; =下个月

的所有行

希望这有帮助