Есть ли способ сравнить размер даты формата в запросе номера Android?

#android #sql #android-room

Вопрос:

Сначала я покажу тебе код

 @Query("SELECT * FROM plan WHERE (DATETIME(startDate, '%Y-%m-%d') <= :temp OR DATETIME(endDate, '%Y-%m-%d') >= :temp) OR specificDate = :temp")
fun getPlanByDate(temp: String): List<PlannerEntity>
 

Внутри названной таблицы plan есть startDate endDate столбцы, specificDate , и. Основываясь на названной дате temp , я хочу получить только данные, принадлежащие temp . Формат temp — «гггг-ММ-дд». startDate И endDate хранятся в формате «гггг-ММ-дд ЧЧ:мм», поэтому вы можете видеть мои попытки изменить его на формат «гггг-ММ-дд». Как я могу изменить формат yyyy-MM-dd HH:mm на yyyy-MM-dd формат?

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

1. Если у вас есть даты в date типе данных, у вас никогда не возникнет этих проблем

Ответ №1:

Как я могу изменить формат гггг-ММ-дд ЧЧ:мм на формат гггг-ММ-дд?

Использовать date(the_column) или strftime('%Y-%m-%d',the_column)

Однако я считаю, что ваша логика неверна, так как это будет только в том случае, если дата окончания меньше даты начала, когда строка будет исключена. Вы, возможно, хотите AND , а не OR в соответствии :-

 .... WHERE (date(startDate) <= :temp AND date(endDate) >=  :temp) OR date(specificDate) = :temp
 

или, поочередно, проще :-

 .... WHERE  :temp BETWEEN date(startDate) AND date(endDate) OR date(specificDate) = :temp
 

Вы можете обратиться к функциям даты и времени SQLite, которые охватывают функции date , datetime , time , julianday и strftime (т. е. манипулирование датой).