5

我开发了一个应用程序..为此我有一个数据库,它有很多表。其中一张表有日期列。我的问题是我必须对日期进行排序,并且必须从下表列中选择最旧的日期,例如 Oct-24-2012

Column_Date
------------

2012 年
11 月7 日 2012 年 11 月 21 日 2012 年 11 月 25 日 2012 年 10 月 25 日
2102 年
10 月 24

我应该怎么做......我已经将日期列存储在字符串中......如果我需要更改日期列的数据类型,请告诉我应该使用哪种数据类型。以及我应该如何对列进行排序。根据该数据类型..

4

3 回答 3

11

在 sqlite 中并没有真正的日期类型。您可以使用其中一种预定义格式将日期存储为字符串,有关详细信息,请参阅http://www.sqlite.org/lang_datefunc.html

时间字符串可以是以下任何一种格式:

YYYY-MM-DD
YYYY-MM-DD HH:MM
YYYY-MM-DD HH:MM:SS
YYYY-MM-DD HH:MM:SS.SSS
YYYY-MM-DDTHH:MM
YYYY-MM-DDTHH:MM:SS
YYYY-MM-DDTHH:MM:SS.SSS
HH:MM
HH:MM:SS
HH:MM:SS.SSS
now
DDDDDDDDDD

您需要将它们存储在 YYYY-MM-DD 中,然后您可以按 asc limit 1 对它们进行排序以获得最旧的日期。所以而不是

Column_Date
------------
Nov-07-2012
Nov-21-2012
Nov-25-2012
Oct-25-2012
Oct-24-2102

您将不得不像这样存储它们

Column_Date
------------
2012-11-07
2012-11-21
2012-11-25
2012-10-25
2012-10-24

最后,您阅读行(如果有)

Cursor oldestDateCursor = db.query("DateTableName", null, null, null, null, null, "date_column ASC LIMIT 1");
if (oldestDateCursor.moveToFirst())
{
    String date = oldestDateCursor.getColumnName(oldestDateCursor.getColumnIndex("date_column"));
}
oldestDateCursor.close();
于 2012-11-09T00:57:59.307 回答
4

您可以更改它的存储方式。而不是一列,有 3:
月、日、年;


这提供了更大的灵活性,您可以更轻松地对其进行排序。由于它是数字月份(1-12)而不是字符串,它将更容易排序。

SELECT month,day,year
FROM tables
ORDER BY month,day,year DESC;
于 2012-11-09T00:56:00.383 回答
1

首先,您不能在 sqlite 中存储类型“日期”。我确信有很多同样值得称赞的方法可以实现这一目标,但这就是我个人如何做你所要求的。我将所有日期转换为这种字符串格式:new SimpleDateFormat("yyyyMMdd");我将其放入我的数据库中。这很方便,我希望原因不言而喻。当我想返回我的日期时,我只需在查询中使用一个订单,如"date DESC". 然后我将其重新转换为我需要的任何格式。

于 2012-11-09T00:58:55.593 回答