Как заказать результаты комнаты по дате в виде строки - PullRequest
0 голосов
/ 01 октября 2019

У меня есть room database. У меня есть столбец для date, и он сохраняется как string.

. Я использовал этот query для сортировки моего столбца:

@Query("SELECT * FROM session WHERE class_id = :classId ORDER BY session_date ASC")
List<SessionEntry> getAllSessions(int classId);

Результат:

    1398/11/25
    1398/11/29
    1398/12/5
    1398/2/14
    1398/4/25
    1398/6/17
    1398/6/30
    1398/7/9
    1398/9/14

но я хочу отсортировать так:

    1398/2/14
    1398/4/25
    1398/6/17
    1398/6/30
    1398/7/9
    1398/9/14
    1398/11/25
    1398/11/29 
    1398/12/5

Можно ли как-нибудь упорядочить по дате в виде строки без изменения структуры базы данных?

Ответы [ 3 ]

1 голос
/ 01 октября 2019

в моем случае это работает, как у меня как формат типа float:

  @Query("SELECT * FROM growthlogdata WHERE babyid = :childid Order By CAST(dateGrowth AS FLOAT) ASC")
List<SessionEntry> getAllSessions(int classId);
0 голосов
/ 02 октября 2019

Я нашел решение, но оно не самое лучшее.

Этот способ используется, когда вы не можете изменить Date Column со строки на другой тип

List<SessionEntry> sessionEntries = mDb.sessionDao().getAllSessions(classId);
Collections.sort(sessionEntries, comparing(SessionEntry::convertStringToDate));

СессияВступление:

public class SessionEntry {
    .
    .
    .
    public Date convertStringToDate() {
        try {
            return new SimpleDateFormat("yyyy/MM/dd").parse(getSessionDate());
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return null;
    }
}
0 голосов
/ 01 октября 2019

Первый ответ: не храните даты в виде строк, используйте правильный тип данных.

Однако, если я правильно понимаю, что в вашей базе данных SQLite нет типа данных date, @matdev будет правильным:Лучшее решение - изменить формат на yyyy-mm-dd. Это соответствует ISO 8601 и будет сортировать в хронологическом порядке.

...