查询获取具有特定范围之间的日期的行(以dd-mm-yyyy的形式存储为字符串)

时间:2013-04-05 06:26:57

标签: android sqlite date

我在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.尽管这些日期之间存在条目。

他们缺少一些基本的比较问题吗?我试着看一些以前的问题,但没有成功。我真的很感激帮助。

3 个答案:

答案 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类型存储,只是因为进一步使用的简单性。