Проблемы со сравнением дат в SQLite

Я пытаюсь сравнить текущую дату с другой, хранящейся в столбце базы данных SQLite, и выбрать каждую строку между этими датами.
Я не могу понять, почему мой запрос не работает.

@Override
public int getFamiliesClientsTotalNum() {
    String countQuery = "SELECT * FROM " + SQLiteHelper.FAMILIES_SERVICES_TABLE_TITLE + " WHERE DATE("
            + SQLiteHelper.FAMILIES_SERVICES_DATE
            + ") >= DATE('" + new SimpleDateFormat("yyyy-MM-dd").format(mStartDate)
            + "') AND DATE(" + SQLiteHelper.FAMILIES_SERVICES_DATE
            + ") <= DATE('" + new SimpleDateFormat("yyyy-MM-dd").format(mFinishDate) + "')";

    Cursor cursor = mSQLiteHelper.getReadableDatabase().rawQuery(countQuery, null);

    int cnt = 0;
    while(cursor.moveToNext()){
        Log.i(TAG, "countQuery: " + countQuery);
        Log.i(TAG, "today is: " + new SimpleDateFormat("yyyy-MM-dd").format(mStartDate));
            cnt++;
    }
    cursor.close();
    return cnt;
}

person Volodymyr Shalashenko    schedule 08.04.2016    source источник


Ответы (1)


Это не работает, потому что вы передаете value (возвращаемый функцией Date()) вместо column name:

... DATE(" + SQLiteHelper.FAMILIES_SERVICES_DATE + ") ...

Это как писать

... WHERE Date(MyDateColumn) = '2016-04-08' ...

Это действительно должно быть так:

..." + SQLiteHelper.FAMILIES_SERVICES_DATE + "...

без использования функции Date().

что похоже на (правильно) написание

... WHERE MyDateColumn = '2016-04-08' ...

Примечание: вы дважды допустили одну и ту же ошибку в своем запросе.

[ИЗМЕНИТЬ]

Использование оператора BETWEEN ... AND ... намного лучше (а также проще для чтения) для указания диапазона дат:

... WHERE MyDateColumn BETWEEN '2015-04-08' AND '2016-04-08' ...
person Phantômaxx    schedule 08.04.2016
comment
Этот ответ действительно правильный! Спасибо чувак! Наконец-то это работает) Извините, но из-за моей низкой репутации я не могу поставить палец вверх! - person Volodymyr Shalashenko; 10.04.2016