【问题标题】:How to select data between two date range in android SQLite如何在 android SQLite 中的两个日期范围之间选择数据
【发布时间】:2012-03-27 19:52:04
【问题描述】:

我有一个表格,其中包含数据以及创建日期。我想根据两个给定的日期范围或一个特定的月份从表中选择数据。

我不知道该怎么做,因为在列上创建的是文本类型,并且存储为 dd-MM-yyyy HH:mm:ss

我正在使用 rawQuery() 来获取数据。

【问题讨论】:

    标签: android sqlite date select


    【解决方案1】:

    这里有一些有用的

     //Get Trips Between dates
    public List<ModelGps> gelAllTripsBetweenGivenDates(String dateOne, String dateTwo) {
        List<ModelGps> gpses = new ArrayList<>();
        SQLiteDatabase database = dbHelper.getReadableDatabase();
        final String columNames[] = {DBHelper.COLUMN_ID, DBHelper.COLUMN_NAME, DBHelper.COLUMN_LATITUTE, DBHelper.COLUMN_LONGITUDE, DBHelper.COLUMN_ALTITUDE, DBHelper.COLUMN_DATE, DBHelper.COLUMN_TYPE, DBHelper.COLUMN_TRAVEL, DBHelper.COLUMN_SPEED};
        String whereClause = DBHelper.COLUMN_TYPE + " = ? AND " + DBHelper.COLUMN_DATE + " BETWEEN " + dateOne + " AND " + dateTwo;
        String[] whereArgs = {"Trip"};
    
        Cursor cursor = database.query(DBHelper.TABLE_NAME_GPS, columNames, whereClause, whereArgs, null, null, DBHelper.COLUMN_NAME + " ASC");
        while (cursor.moveToNext()) {
            ModelGps gps = new ModelGps();
            gps.setId(cursor.getLong(cursor.getColumnIndex(DBHelper.COLUMN_ID)));
            gps.setName(cursor.getString(cursor.getColumnIndex(DBHelper.COLUMN_NAME)));
            gps.setLatitude(cursor.getDouble(cursor.getColumnIndex(DBHelper.COLUMN_LATITUTE)));
            gps.setLongitude(cursor.getDouble(cursor.getColumnIndex(DBHelper.COLUMN_LONGITUDE)));
            gps.setAltitude(cursor.getDouble(cursor.getColumnIndex(DBHelper.COLUMN_ALTITUDE)));
            gps.setDate(cursor.getString(cursor.getColumnIndex(DBHelper.COLUMN_DATE)));
            gps.setType(cursor.getString(cursor.getColumnIndex(DBHelper.COLUMN_TYPE)));
            gps.setTravel(cursor.getString(cursor.getColumnIndex(DBHelper.COLUMN_TRAVEL)));
            gps.setSpeed(cursor.getString(cursor.getColumnIndex(DBHelper.COLUMN_SPEED)));
            gpses.add(gps);
        }
        database.close();
        cursor.close();
        return gpses;
    }
    

    【讨论】:

      【解决方案2】:

      你可以这样做:

       mDb.query(MY_TABLE, null, DATE_COL + " BETWEEN ? AND ?", new String[] {
                      minDate + " 00:00:00", maxDate + " 23:59:59" }, null, null, null, null);
      

      minDatemaxDate,它们是日期字符串,构成了您的范围。此查询将从MY_TABLE 获取所有在此范围内的行。

      【讨论】:

      • mDb.rawQuery("select * from " + MY_TABLE + " where " + DATE_COL + " BETWEEN " + minDate + " 00:00:00 AND " + maxDate + " 23:59:59");
      • 我的日期是从 3 月 11 日到 3 月 14 日,但是当我使用查询时,“从在 '11-03-2012 00:00:00' AND '12-05' 之间创建的类别中选择 * -2012 23:59:59'",它应该显示所有日期的数据,因为我的月份设置为 5 月,但它只显示 3 月 11 日和 12 日的数据:(
      • 我已经这样做了“从日期('2012-03-11')和日期('2013-01-01')之间的日期(createdon)的类别中选择*;”它似乎工作:)
      • 什么是DATE_COL,minDate和maxDate的格式是什么??
      • @TylerTreat 你在这个甲酸盐中有像 2013-01-01 这样的存储日期,但在我的情况下是 2013/01/01 这个甲酸盐所以它不起作用
      猜你喜欢
      • 1970-01-01
      • 2012-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-10
      • 2013-03-27
      • 1970-01-01
      相关资源
      最近更新 更多