在SQLite中存储日期并按日期执行搜索

时间:2014-01-02 09:41:14

标签: android sqlite simpledateformat

我想在SQLite数据库中插入“2013-12-24”等日期。我的要求包括日期搜索功能。

查询表 -

CREATE TABLE IF NOT EXISTS LEAD_TIME_TABLE
             (
             LEAD_TIME_ID
             INTEGER PRIMARY KEY AUTOINCREMENT,
             **LEAD_TIME_VALUE
             DATE NOT NULL,**
             LEAD_TIME_TYPE
            TEXT NOT NULL);

当我在此表中插入数据时,日期将从2013-12-24解析为。{ Tue Dec 24 19:00:00 EST 2013

这是我解析日期的方法:

SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
dateFormat.setTimeZone(TimeZone.getTimeZone("IST"));
Date date = null;
try {
    date = dateFormat.parse("2013-12-24");
} catch (ParseException e) {
    e.printStackTrace();
} 

当我使用以下查询进行搜索时:

select * from lead_time where value between 'Thu Dec 26 13:30:00 EST 2013' and 'Tue Dec 31 13:30:00 EST 2013'

在结果中我得到了意想不到的结果。我该如何解决?

3 个答案:

答案 0 :(得分:1)

Date中{p> DateTimeSQLite不是supported datatypes。作为SQLite创建者自己propose,我们应该使用字符串或整数来存储这些类型。您建议的解决方案使用TEXT

但是,我认为通常使用字符串而不是整数是错误的决定,特别是如果你想比较。这是another thread在SO中讨论相同的问题。您还可以在那里查看推荐的解决方案。我也支持这种方法。

答案 1 :(得分:0)

对于我的DB,我使用“LONG”类型(基本上是“INT”)并将时间存储在epoch millis中。然后,您可以使用Calendar实例设置查询所需的各种时间间隔的值:

select * from lead_time where value between calendar1.getTimeInMillis() and calendar2.getTimeInMillis();

似乎运行良好,但表格没有易于阅读的日期。快速查询和易于携带的数据IMO的小价格。

答案 2 :(得分:-2)

您可以使用参数化查询:How do I use prepared statements in SQlite in Android?

SQLiteDatabase db = dbHelper.getWritableDatabase();
SQLiteStatement stmt = db.compileStatement("select * from lead_time where value between ? and ?");
stmt.bindDate(1, date1);
stmt.bindDate(2, date2);
stmt.execute();