2011-06-06 236 views
0

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

public Cursor getAll(){ 

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

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

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

谢谢..

+0

该列是日期时间列吗? – 2011-06-06 14:10:58

+0

不,列是字符串 – Gabrielle 2011-06-06 14:14:11

回答

0

我不知道android开发任何东西,但它听起来像你的日期字段存储为一个字符串,而不是一个日期,是正确的?

如果是这样,您可以:

  • 更改表,以便字段是一个日期(那么它应该正确地比较)
  • 或者将其存储在一个标准的格式,默认字符串比较排序日期正确。由于字符串比较首先对第一个字符进行排序,对第二个字符进行第二个排序,这会首先将最大的时间差异,即。 “2011-05-31”(包括零)。

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

0

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

+0

即使我的山是可能,6月...而不是5,6? – Gabrielle 2011-06-06 14:16:08

+0

@Gaby:不,不要将月份保存为文本(5月,6月等),以数字形式(05,06)。正如已经提到的那样,将该列设置为'datetime'列而不是'varchar',但以我建议的格式(ISO 8601)存储意味着无论在SQL查询中处理还是以后处理为字符串,都可以保证正确的排序。 – Squonk 2011-06-06 14:33:25

0

如果您的Data列不是datetime类型,则可能存在问题。看看此相关的SO问题和答案:

SQL ORDER BY date problem