Как выбрать записи, где дата находится между date1 и date2? - PullRequest
0 голосов
/ 16 апреля 2019
SQLiteDatabase db = DatabaseProvider.dbHelper.getReadableDatabase();
Cursor cursor = db.rawQuery("Select * from " + ConsumerEnquiryTable.TABLE_NAME + " where "
            + ConsumerEnquiryTable.Cols.USER_LOGIN_ID + "='" + userId + "' AND ( CAST("
            + ConsumerEnquiryTable.Cols.DUE_DATE + " as datetime) >= CAST(" + beginDate  +
            " as datetime) AND CAST(" + ConsumerEnquiryTable.Cols.DUE_DATE + " as datetime) <= CAST("+ endDate + " as datetime)) AND "
            + ConsumerEnquiryTable.Cols.CARD_STATUS + "='" + jobCardStatus + "'", null);

Я пробовал с CAST, strftime, datetime.Столбец due_date имеет тип varchar, и я хочу выбрать записи, имеющие due_date между beginDate и endDate.Все даты имеют формат дд / мм / гггг

Ответы [ 2 ]

1 голос
/ 16 апреля 2019

Если вы измените формат столбца DUE_DATE на YYYY-MM-DD, который является единственным сопоставимым форматом для SQLite, тогда все, что вам нужно, это предложение BETWEEN и передать все аргументы в виде массива строк, что является рекомендуемымсамый безопасный способ избежать любого риска внедрения SQL:

Cursor cursor = db.rawQuery(
    "SELECT * FROM " + ConsumerEnquiryTable.TABLE_NAME + " WHERE " + 
    ConsumerEnquiryTable.Cols.USER_LOGIN_ID + " = ? AND (" +
    ConsumerEnquiryTable.Cols.DUE_DATE + " BETWEEN ? AND ?) AND " +
    ConsumerEnquiryTable.Cols.CARD_STATUS + " = ?", 
    new String[] {userId, beginDate, endDate, jobCardStatus}
);

Конечно, аргументы beginDate и endDate также должны быть в формате YYYY-MM-DD.

0 голосов
/ 16 апреля 2019

Вы можете использовать следующий запрос

mDb.query(MY_TABLE, null, DATE_COL + " BETWEEN ? AND ?", new String[] {
                minDate + " 00:00:00", maxDate + " 23:59:59" }, null, null, null, null);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...