2016-12-23 2 views
-1

Angenommen, Sie eine Tabelle mit den folgenden Spalten haben (alle ganzen Zahlen)SQLite Abfrage bekommen Zeilen der nächsten 30 Tage, (zwischen jetzt und jetzt + 30 Tagen)

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

davon ausgehen, dass das Datum ist jetzt 4/4/2016 So erhalten Sie Datensätze in der Sqlite-Abfrage, die zwischen jetzt und den nächsten 30 Tagen liegen. Bedeutet, die nächsten 30 Tage Aufgaben.

so sollte das Ergebnis sein,

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

dank

Antwort

2

Um diese Spalten in SQLite Standard-Datumsformat zu konvertieren, u printf() se:

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

Sie können dann mit den integrierten Datumsfunktionen:

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

Erste

muss ich sagen, dass mit date arbeiten hätte waaaay besser, oder auch mit dem date.getTime arbeiten die gibt eine long zurück.

Sagte, dass

von Java-Seite müssen Sie etwas tun:

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); 

Dadurch werden alle Zeilen nehmen, wo Datum ist> = Strom und Datum ist < = nächsten Monat

Hoffe, das hilft

+0

Dies ist die beste Art und Weise, die ich folgen werde. Vielen Dank – Hatim

Verwandte Themen