如何按日期以字符串形式订购房间结果

How to Order Room results by Date as String

我有一个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

有什么方法可以在不修改数据库结构的情况下按日期作为字符串进行排序吗?

在我的例子中,它正在工作,因为我喜欢浮点型甲酸盐:

  @Query("SELECT * FROM growthlogdata WHERE babyid = :childid Order By CAST(dateGrowth AS FLOAT) ASC")
List<SessionEntry> getAllSessions(int classId);

第一个答案,不要将日期存储为字符串,使用正确的日期数据类型。

但是,如果我正确理解您的 SQLite 数据库没有日期数据类型,@matdev 是正确的:最好的解决方案是将格式更改为 yyyy-mm-dd。这符合 ISO 8601 并将按时间顺序排序。

我找到了解决方案,但不是最好的。

这种方式适用于无法将 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;
    }
}