#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
(т. е. манипулирование датой).