В помощнике по базе данных может быть метод, подобный следующему: -
public Cursor getDatesInRange(String fromDate, String toDate) {
String whereclause = COL_DATE + " >= datetime(?) and " + COL_DATE + " <= datetime(?)";
String[] whereargs = new String[]{fromDate,toDate};
return this.getWritableDatabase().query(
TB_DATE,
null,
whereclause,
whereargs,
null,
null,
COL_DATE + " DESC"
);
}
- COL_DATE , содержащий имя соответствующего столбца.
- TB_DATE с именем соответствующей таблицы.
- fromDate и toDate должны быть в формате гггг-ММ-дд ЧЧ:мм: сс или подформат, отмечающий, что ЧЧ: мм: сс, если не указан, равняется 00: 00: 00 .
- например, yyyy-MM-dd в некоторых ситуациях будет достаточно.
- Предположение было сделано в отношении ЗАКАЗА с использованием
COL_DATE + " DESC"
- Для определенной даты вы просто используете ту же дату, НО с использованием часов / минут / секунд, начиная с гггг-ММ-дд 00: 00: 00 и до гггг-ММ-дд- 23: 59: 59 .
Пример
Databasehelper: -
открытый класс SO50282282DBHelper extends SQLiteOpenHelper {
public static final String DBNAME = "SO50282282";
public static final int DBVERSION = 1;
public static final String TB_DATE = "tbl_date";
public static final String COL_DATE = "date_column";
public SO50282282DBHelper(Context context) {
super(context, DBNAME, null, DBVERSION);
this.getWritableDatabase();
}
@Override
public void onCreate(SQLiteDatabase db) {
String crtsql = "CREATE TABLE IF NOT EXISTS " +
TB_DATE +
"(" +
COL_DATE + " TEXT " +
")";
db.execSQL(crtsql);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
public long addDate(String date) {
ContentValues cv = new ContentValues();
cv.put(COL_DATE,date);
return this.getWritableDatabase().insert(TB_DATE,null,cv);
}
public Cursor getDatesInRange(String fromdate, String toDate) {
String[] columns = new String[]{"*,rowid AS id"};
String whereclause = COL_DATE + " >= datetime(?) and " + COL_DATE + " <= datetime(?)";
String[] whereargs = new String[]{fromdate,toDate};
return this.getWritableDatabase().query(
TB_DATE,
columns,
whereclause,
whereargs,
null,
null,
COL_DATE + " DESC"
);
}
}
- Примечание rowid извлечено исключительно для демонстрации
В упражнении: -
SO50282282DBHelper dbhlpr = new SO50282282DBHelper(this);
// Only insert some testing rows if there are none
if (
DatabaseUtils.queryNumEntries(
dbhlpr.getWritableDatabase(),
SO50282282DBHelper.TB_DATE
) < 1) {
dbhlpr.addDate("2018-01-01 08:30:56");
dbhlpr.addDate("2018-02-01 09:31:56");
dbhlpr.addDate("2018-03-01 10:32:56");
dbhlpr.addDate("2018-04-01 11:35:56");
dbhlpr.addDate("2018-05-01 12:36:56");
dbhlpr.addDate("2018-02-02 12:37:56");
dbhlpr.addDate("2018-03-02 14:38:56");
}
// gets rows id=3 id=4 id=7
// (id 1, 2 and 6 before 2018-03-01)(id 5 after 2018-04-30)
Cursor csr = dbhlpr.getDatesInRange("2018-03-01","2018-04-30");
SO50282282LogDates(csr);
// gets rows id = 1
csr = dbhlpr.getDatesInRange("2018-01-01 00:00:00","2018-01-01 23:59:59");
SO50282282LogDates(csr);
//gets rows id = 2, 3, 4, 6 and 7
csr = dbhlpr.getDatesInRange("2018-01-01 08:30:57","2018-05-01 12:36:55");
SO50282282LogDates(csr);
csr.close();
Результаты в журнале: -
Для первого из трех (используя dbhlpr.getDatesInRange("2018-03-01","2018-04-30")
): -
05-11 03:56:44.777 2203-2203/? D/EXTRACTED_DATE: Date is 2018-04-01 11:35:56 from row # 4
Date is 2018-03-02 14:38:56 from row # 7
Date is 2018-03-01 10:32:56 from row # 3
Для второго (используя getDatesInRange("2018-01-01 00:00:00","2018-01-01 23:59:59")
): -
Date is 2018-01-01 08:30:56 from row # 1
И наконец (используя getDatesInRange("2018-01-01 08:30:57","2018-05-01 12:36:55")
): -
05-11 03:56:44.781 2203-2203/? D/EXTRACTED_DATE: Date is 2018-04-01 11:35:56 from row # 4
Date is 2018-03-02 14:38:56 from row # 7
Date is 2018-03-01 10:32:56 from row # 3
Date is 2018-02-02 12:37:56 from row # 6
Date is 2018-02-01 09:31:56 from row # 2