我想从SQLite表中获取两个日期之间的记录,但是当在where子句中比较日期时它不起作用,实际上它适用于用作条件的其他String列或者当没有指定where子句时,所以是在where子句中使用日期的任何其他方式。
cursor = db.rawQuery("SELECT min(activity_date), max(activity_date) FROM tbl_activity_details" , null);
if(cursor != null) {
itemsList.clear();
while(cursor.moveToNext()) {
itemsList.add(cursor.getString(0));
itemsList.add(cursor.getString(1));
}
cursor.close();
try {
fromDate = sdf.parse(itemsList.get(0));
toDate = sdf.parse(itemsList.get(1));
} catch(Exception e) {
e.printStackTrace();
}
try {
Toast.makeText(this, "here "+sdf.format(fromDate)+" "+sdf.format(toDate), 5000).show();
//Toasts 2015-04-23 2015-05-01
String fd = sdf.format(fromDate);
String td = sdf.format(toDate);
cursor1 = db.rawQuery("SELECT * FROM tbl_activity_details WHERE activity_date BETWEEN '"+fd+"' AND '"+td+"'", null);
Toast.makeText(this, "here 1"+cursor1.getCount(), 5000).show();
//Toasts here 1 10
if(cursor1 != null) {
while(cursor1.moveToNext()) {
Toast.makeText(this, "here 2"+cursor1.getString(0), 5000).show();
}
} else {
Toast.makeText(this, "No Record Found", 5000).show();
}
cursor1.close();
} catch (Exception e) {
e.printStackTrace();
} finally {
db.close();
}
答案 0 :(得分:1)
我问了一个类似的问题,答案可能会帮助你,here's这个问题。
答案中可能与您相关的快速摘录:
如果在SQLite中使用String作为数据类型,则必须将System.currentTimeMillis()格式化为日期格式“yyyy / MM / dd”。如果您使用其他格式,例如M / d / yyyy - >您将有日期字符串比较问题。有关M / d / yyyy格式,请参阅下面的问题:
"5/15/2015".compareTo("11/30/2015") ---> Return 4 > 0
--> means "5/15/2015" > "11/30/2015" --- Wrong
答案 1 :(得分:0)
日期可以像这样比较..这可能会对你有所帮助。
select * from MyTable
where mydate >= Datetime('2000-01-01 00:00:00')
and mydate <= Datetime('2050-01-01 23:00:59')