Как выбрать дату дня рождения из базы данных SQLite? - PullRequest
0 голосов
/ 27 января 2020

Я пытаюсь выбрать все записи из базы данных SQLite, где дата рождения сегодня.

Моя схема таблицы такая, как показано ниже.

public void onCreate(SQLiteDatabase db) {
        db.execSQL("create table "+TABLE_NAME+" (id integer primary key, name text, isactive integer default 0, bday text);");
}

I попытался получить дату, написав запрос ниже. Но бесполезно.

case 2:
    //Toast.makeText(context,"today called",Toast.LENGTH_SHORT).show();
      String query="select * from "+TABLE_NAME+" where bday =strftime('%m',date('now','localtime')) and bday=strftime('%Y',date('now','localtime'))";
      cursor=database.rawQuery(query,null);
break;

Я проанализировал введенную пользователем дату для сохранения в базе данных в формате 'гггг-мм-дд' . Помогите мне узнать сегодняшний день рождения из всех записей.

Ответы [ 2 ]

0 голосов
/ 27 января 2020

Поскольку вы используете заданный шаблон c ('yyyy-MM-dd') для сохранения даты рождения, пользователей легко найти по дню рождения. Позвольте мне описать в несколько шагов.

  1. Программно собирать текущую дату и подстроки, взять только месяц и дату от текущей даты.

    String pattern = "yyyy-MM-dd";
    SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
    
    String date = simpleDateFormat.format(new Date()); //2020-01-27
    String birthdaySubString= date.substring(5, 10); //01-27
    
  2. Вызовите метод обработчика вашей базы данных с помощью birthDaySubString.

        getUserbyBirthDay(birthdaySubString);
    
  3. Из метода обработчика запросите в вашей базе данных оператор «like» и используйте для этого рождения birthDaySubString.

    public List<user> getUserbyBirthDay(String birthdaySubString){ //select * from user where bday like "%08-17";<br> String query="select * from "+TABLE_NAME+" where bday like "+birthdaySubString+"'"; cursor=database.rawQuery(query,null);<br> }

Должно работать. Протестировано в sqliteBrowser.

0 голосов
/ 27 января 2020

Если вы хотите получить все ряды людей, чей день рождения сегодня, вас должны интересовать только месяц и день и , а не год . Если формат столбца bday равен YYYY-MM-DD, то вам нужна только та часть MM-DD, которую вы можете получить:

substr(bday, 6)

Также вам нужна часть MM-DD сегодняшней даты, которую вы можно получить с помощью:

strftime('%m-%d',date('now', 'localtime'))

Таким образом, ваше предложение WHERE должно быть:

where substr(bday, 6) = strftime('%m-%d',date('now', 'localtime'))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...