Вы должны начать с проверки документации SQLite по функциям даты и времени .
Например, для решения вашей проблемы " И какой будет запрос, если я хочу получить строку, дата которой на 2 или 3 дня вперед ", вы будете использовать вычисления в юлианский день, например этот пример, который вы можете выполнить непосредственно в оболочке sqlite3
:
create TABLE example (_id INTEGER PRIMARY KEY NOT NULL, date TEXT NOT NULL);
insert into example (date) values ('2011-01-02');
insert into example (date) values ('2011-04-02');
insert into example (date) values ('2012-02-26');
insert into example (date) values ('2012-02-27');
insert into example (date) values ('2012-02-28');
insert into example (date) values ('2012-02-29');
insert into example (date) values ('2012-03-01');
insert into example (date) values ('2012-03-02');
insert into example (date) values ('2012-03-03');
select date from example where julianday(date) - julianday('now') < 3 AND julianday(date) - julianday('now') > 0;
Это вернуло бы (учитывая, что «сегодня» 28 февраля) всех дней, которые будут один, два или три дня в будущем:
2012-02-29
2012-03-01
2012-03-02
Редактировать: Чтобы возвращать только строки, независимо от года, вы можете сделать что-то вроде этого - используя VIEW
(опять же, exampl прямо в SQLite):
create view v_example as select _id, date,
strftime("%Y", 'now')||'-'||strftime("%m-%d", date) as v_date from example;
Этот VIEW
будет возвращать дату и время в вашей базе данных, «перебазированных» на текущий год, что, конечно, может привести к всевозможным странным действиям со високосными годами.
В этом случае вы можете выбрать все даты, подобные этой:
select date from v_example where
julianday(v_date) - julianday('now') < 3 AND
julianday(v_date) - julianday('now') > 0 ORDER BY v_date;
Что вернет:
2012-02-29
2012-03-01
2001-03-01
2012-03-02
2010-03-02