【问题标题】:Sorting dates in sqlite database?在 sqlite 数据库中对日期进行排序?
【发布时间】:2012-11-09 09:29:23
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: android sqlite android-sqlite


    【解决方案1】:

    在 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 限制 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();
    

    【讨论】:

    • 感谢您的回复。我还有一个疑问,如果我想以排序形式输入日期,无论如何都可以这样做...就像用户可以随时输入日期,但表格应该以排序形式,而且我正在使用列表来显示他/她输入的日期..以排序形式..你知道任何解决方案吗? ...我有一个想法,例如首先以排序形式读取表格并使用相同的游标检索数据并更新同一个表格...
    • 你应该插入到数据库中,然后按顺序重新获取。你不能只插入,而排序最快的是在日期列上使用索引
    • 感谢您的宝贵回答,它对我帮助很大
    【解决方案2】:

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


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

    SELECT month,day,year
    FROM tables
    ORDER BY month,day,year DESC;
    

    【讨论】:

    • 简单最好的解决方案
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-01-17
      • 2016-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多