【问题标题】:Android sqlite search data in between dates日期之间的Android sqlite搜索数据
【发布时间】:2017-02-01 05:22:52
【问题描述】:

我正在尝试在两个日期之间从 sqlite 获取数据...

我的日期值存储在 sqlite 27/01/2017 15:10:42

我获取数据的代码...

 Cursor fetchallconsultations(String from,String to) {       
    SQLiteDatabase db = this.getReadableDatabase();
    return db.rawQuery("select * from gle_consultns where consultn_create_date >= '"+from+" 00:00:00' and consultn_create_date <= '"+to+" 00:00:00'", null);
}

from 和 to 的值是..

来自==26/01/2017

到==01/02/2017

但执行fetchallconsultations函数时光标为空。我该如何解决这个问题?

【问题讨论】:

  • 您确实应该在使用 SQLite 时以 ISO8601 格式存储日期和时间; SQLite 中没有本机日期或时间类型,只有字符串,因此您需要一种与字符串进行比较的格式。
  • 如何将日期存储在 Consultn_create_date 中?
  • @MikeT ive 在我的问题中给出了这一点
  • @muistooshort 谢谢...我修好了

标签: android sqlite


【解决方案1】:

您的日期以非标准格式存储。标准格式按从左到右的顺序排列年、月、日。因此,以下查询应该会给您预期的结果:

SELECT *
FROM gle_consultns
WHERE consultn_create_date >= '2017-01-26 00:00:00' AND
      consultn_create_date <= '2017-02-01 00:00:00'

您要么需要清理日期数据,要么可能进行复杂的字符串提取以构建上述形式的时间戳。

【讨论】:

    【解决方案2】:
    String str="SELECT * FROM tablename WHERE date BETWEEN '"+startdate+"' AND '"+enddate+"'";
    
    cursor = db.rawQuery(str, null);
    
    [where date format is startdate=2017-01-26 and enddate=2017-02-01]
    

    【讨论】:

      【解决方案3】:

      使用

      expr BETWEEN ? AND ?
      

      并使用selectionArgs

      https://www.sqlite.org/lang_expr.html

      【讨论】:

      • 这不会解决 OP 的问题,因为日期的格式是不可比较的。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-11-03
      • 1970-01-01
      • 1970-01-01
      • 2018-11-19
      • 2023-03-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多