0

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

他们是我缺少的一些基本比较问题吗?我尝试查看以前的一些问题,但没有解决。我非常感谢您的帮助。

4

3 回答 3

3

要使字符串比较正常工作,您必须使用最重要字段在前的格式,即yyyy-mm-dd. (这也是 SQLite内置日期函数唯一支持的格式。)

于 2013-04-05T07:12:33.423 回答
1

在查询之前,我想突出显示正确的日期格式,即

yyyy-MM-dd

确保以这种格式保存您的日期。然后进一步查询如下:

 Cursor cursor = db.query(TABLE, null, COL_GAME_DATE + " BETWEEN ? AND ?", new String[]{
                        startDate, endDate},
                null, null, null);
于 2016-02-15T01:57:24.610 回答
0

我建议你先修复你的数据库。日期应该存储在 DATE 类型中,只是因为进一步使用的简单性。

于 2013-04-05T07:14:14.783 回答