#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'))"