【问题标题】:Sort lists by date?按日期排序列表?
【发布时间】:2011-06-06 14:03:19
【问题描述】:

我有一个问题。在我的应用程序中,我在数据库中保存了一些列表。每个列表都与这种格式的日期相关联,即 2011 年 6 月 6 日。如何按日期订购这些清单?我写了我的功能:

public Cursor getAll(){

    return (mDb.rawQuery("SELECT _id, Title, Shop , Data , Budget_allocated ," +
            " Budget_spent FROM Lists ORDER BY Data",null));
}

但它不能正常工作。我认为它只比较一天。例如,如果我有 31-May-2011 和 6-June-2011,它会说第一个日期在第二个日期之后。

这可能是我想要做的吗?我应该以如下格式修改日期:6-06-2011?

谢谢..

【问题讨论】:

  • 该列是日期时间列吗?

标签: android database sql-order-by


【解决方案1】:

我对android开发一无所知,但听起来你的日期字段存储为字符串而不是日期,对吗?

如果是这样,您可以:

  • 更改您的表格,使该字段为日期(然后它应该正确比较)
  • 或者以标准格式存储它,以便默认字符串比较可以正确排序日期。由于字符串比较首先在第一个字符上排序,第二个在第二个字符上排序,等等,这将把最大的时间差放在第一位,即。 “2011-05-31”(包括零)。

(您应该能够通过创建一个新字段,将旧字段中的数据以正确的格式复制到新字段中,然后删除旧字段并重命名新字段来转换字段,或者更简单地说,如果您只是想更改文本的格式。您应该可以通过代码或使用“更新”查询(AFAIK)来做到这一点。)

【讨论】:

    【解决方案2】:

    使用如下日期格式...yyyy-MM-dd HH:mm:ss。这保证可以按升序或降序排序。

    【讨论】:

    • 即使我的月份是五月,六月...而不是 5,6?
    • @Gaby:不,不要将月份存储在文本中(5 月、6 月等),以数字形式存储(05、06)。如前所述,将列设为datetime 列而不是varchar,但以我建议的格式(ISO 8601)存储意味着无论是在 SQL 查询中还是稍后作为字符串处理,都可以保证正确排序。
    【解决方案3】:

    如果您的Data 列不是日期时间类型,则可能存在问题。看看这个相关的 SO 问题和答案:

    SQL ORDER BY date problem

    【讨论】:

      猜你喜欢
      • 2021-07-05
      • 2017-08-19
      • 1970-01-01
      • 1970-01-01
      • 2013-06-17
      • 2017-11-15
      • 2016-08-09
      • 2021-07-25
      相关资源
      最近更新 更多