Почему SQLite не выбирает сегодняшние день и месяц? - PullRequest
0 голосов
/ 07 мая 2020

У меня следующая структура базы данных

db.execSQL("create table " + TABLE_NAME + " (id integer primary key autoincrement,fname text default null, bday text)");

таблица данных

enter image description here

Пытаюсь выбрать записи сегодняшнего дня и месяца. Но он всегда возвращает 0. В чем проблема?

public Cursor selectTodaysBday() {

        SQLiteDatabase db = this.getWritableDatabase();
        Cursor cursor = db.rawQuery("select fname from " + TABLE_NAME + " where strftime('%m',bday) = strftime('%m',date('now')) and strftime('%d',bday) = strftime('%d',date('now'))", null);

        Log.i("app", "todays count: " + cursor.getCount()); //always returning 0, i have 5 records of todays day and month

        return cursor;
}

Пожалуйста, помогите мне решить эту проблему.

1 Ответ

0 голосов
/ 07 мая 2020

Единственный способ, при котором ваш запрос не будет работать, - это если даты не имеют формата YYYY-MM-DD, который является единственным допустимым форматом даты для SQLite. В этом случае strftime() возвращает null, и вы не получаете никаких строк из вашего запроса. Измените формат дат на YYYY-MM-DD, и вы также можете упростить запрос до следующего:

Cursor cursor = db.rawQuery(
    "select fname from " + TABLE_NAME + " where strftime('%m-%d',bday) = strftime('%m-%d',date('now'))", 
    null
);

Нет причин проверять отдельно месяц и день.

...