Как фильтровать данные по дате и месяцу только в базе данных номеров и игнорировать год

#android #android-room

#Android #android-room

Вопрос:

     @Query("Select * From Mstudent where (strftime('%d%m',dob)) = :todayDate order by (strftime('%d%m',dob))")
    List<Mstudent> getStudentByBirthDate(Date todayDate);
  

это то, что я сделал, но это выдает ошибку, потому что запрос неверен.
можем ли мы фильтровать только по дате и месяцу и игнорировать год?

Ответ №1:

Попробуйте этот запрос (в случае, если вы используете TypeConvertor Date для Long ):

 @Query("Select * From Mstudent where strftime('%d%m',datetime(dob/1000, 'unixepoch'))= strftime('%d%m',datetime(:todayDate/1000, 'unixepoch')) order by strftime('%d%m',dob)")
List<Mstudent> getStudentByBirthDate(Date todayDate);
  

Комментарии:

1. да, я использую TypeConvertor date в long, но все равно это дает мне нулевой объект. Кстати, спасибо за ваше любезное внимание к моему вопросу.

2. Что ж, попробуйте каким-то образом отладить запрос (с помощью какого-либо браузера DB или другим способом). В любом случае для отладки запросов полезный навык работы с БД. Например, вы можете удалить WHERE условие и проверить запрос Select * From Mstudent, strftime('%d%m',datetime(dob/1000, 'unixepoch')), strftime('%d%m',datetime(:todayDate/1000, 'unixepoch')) . Два добавленных поля должны быть строковыми 2809 (скажем, на сегодня). И они должны быть равны для строк с датой, по которой вы ищете. И, кстати, всегда пожалуйста )

Ответ №2:

Этот запрос, возможно, вы находите

 "Select * From Mstudent where strftime('%d%m',datetime(dob/1000, 'unixepoch'))= strftime('%d%m',datetime(:todayDate/1000, 'unixepoch'))"