我在sqllite数据库中以TEXT的形式存储日期。格式为“dd-mm-yyyy”。我正在进行查询以选择具有两个给定日期之间的日期的行。当我查询属于同一个月的查询日期的数据库时,我得到了结果。但是,当日期范围属于不同的月份时,它不返回任何行。例如:
当日期类似于:29-03-2013至05-04-2013时出现问题。当日期介于:02-04-2013和05-04-2013之间时,它会成功返回行。在所有日期都有包含条目的行。
以下是我尝试过的方法:
// MySQLiteHelper.COLUMN_DATE_DATE stores column name which is 'date'
// startdate and end date are string in form of mm-dd-yyyy
// MySQLiteHelper.TABLE_NAMES contain table name string
// MySQLiteHelper.COLUMN_MOOD_LEVEL is another column that I wish to get in return
我尝试使用BETWEEN子句和< =和> =,但对输出没有影响。方法如下:
// Method 1:
String selection = MySQLiteHelper.COLUMN_DATE_DATE + " BETWEEN '"+startdate+"' AND '"+ enddate+"' ";
// Method 2:
String selection = MySQLiteHelper.COLUMN_DATE_DATE + " >= '"+startdate+"' AND "+MySQLiteHelper.COLUMN_DATE_DATE+" <= '"+ enddate+"' ";
String []colum = {MySQLiteHelper.COLUMN_MOOD_LEVEL};
Cursor cursor = database.query(MySQLiteHelper.TABLE_NAMES, colum, selection, null, null, null, null);
当我使用
时cursor.getCount()
要查看返回的行数,它会给出0.尽管这些日期之间存在条目。
他们缺少一些基本的比较问题吗?我试着看一些以前的问题,但没有成功。我真的很感激帮助。
答案 0 :(得分:3)
要使字符串比较正常工作,您必须使用最重要字段首先出现的格式,即yyyy-mm-dd
。 (这也是SQLite built-in date functions唯一支持的格式。)
答案 1 :(得分:1)
在查询之前,我想强调正确的日期格式
YYYY-MM-DD
确保以此格式保存您的日期。然后进一步查询:
Cursor cursor = db.query(TABLE, null, COL_GAME_DATE + " BETWEEN ? AND ?", new String[]{
startDate, endDate},
null, null, null);
答案 2 :(得分:0)
我建议您先修复数据库。日期应该以DATE类型存储,只是因为进一步使用的简单性。