【问题标题】:Android and SQLite - select everything between 2 datetime'sAndroid 和 SQLite - 选择 2 个日期时间之间的所有内容
【发布时间】:2014-03-20 22:21:08
【问题描述】:

如何从具有特定日期的 DATETIME 字段的 Android SQLite 数据库中选择所有内容?

我创建了下表:

private static final String DATABASE_CREATE = "" +
            "create table " + TABLE_STATISTIC + " (" 
              + COLUMN_STATISTIC_ID + " integer primary key autoincrement, " 
              + COLUMN_STATISTIC_DATETIME + " DATETIME default current_timestamp, "
              + COLUMN_STATISTIC_SERVICED + " integer not null, "
              + COLUMN_STATISTIC_CATEGORY + " integer); ";

如您所见,它有一个 DATETIME 字段。我需要从一天的开始到一天结束的 DATETIME 之间获取所有数据。

如何做到这一点?我不知道如何在 java/android 中或直接在 SQL 语句中生成这些值。

我真的希望有人能回答这个问题。 提前致谢

【问题讨论】:

  • 在db而不是datetime中保存timeinmillies会更好
  • 感谢您的意见。好的,怎么来的? :)
  • 我在我的应用程序中完成的是我的表 db.execSQL("create table UploadBillDataTable(_id integer primary key autoincrement,totalBill text, totalConsumption text, uploadBillDate integer ,unit text, uploadingMonth integer)") ;

标签: android sqlite datetime


【解决方案1】:

1.第一次以长格式在数据库中保存日期。

2.然后将这些日期与开始和结束日期进行比较,如下所示

dbDate > startTime && dbdate

其中 startTime 和 endTime 是您要获取数据的范围

【讨论】:

  • 感谢您的所有回答。我最终得到了您建议的解决方案,将长值保存在数据库而不是 Datetime 中,这更容易使用。我会接受你的回答,因为我认为你是第一个发布它的人:)
【解决方案2】:

SQLite 没有真正的日期/时间类型,而是将所有内容存储为字符串。当且仅当字符串具有 YYYY-MM-DD HH:MM:SS 格式时,它才被接受为 SQLITE 中的日期。

current_timestamp:该函数还可以获取上面给出的格式的当前日期时间。

SELECT * FROM TABLE_STATISTIC WHERE COLUMN_STATISTIC_DATETIME BETWEEN '2014-01-01 13:42:03' AND '2014-03-20 13:42:03';

【讨论】:

    【解决方案3】:

    如果您对 between 子句进行更多研究,Google 上有很多可用选项 你也可以试试这个

    `SELECT * FROM DOB WHERE birthdate BETWEEN #07/04/1996# AND #07/09/1996#;`
    

    SELECT Date,dob from pb where uid=1 and Date>'2011/02/25' and Date<'2011/02/27'
    

    this 将指导更多。

    【讨论】:

    • 他们是经过测试的查询吗??我相信它不会在 sqlite 中比较日期
    • 现在我没有测试我自己
    【解决方案4】:

    正如其他人所说,节省时间。

    private static final String DATABASE_CREATE = "" +
                "create table " + TABLE_STATISTIC + " (" 
                  + COLUMN_STATISTIC_ID + " integer primary key autoincrement, " 
                  + COLUMN_STATISTIC_DATETIME + " integer not null, "
                  + COLUMN_STATISTIC_SERVICED + " integer not null, "
                  + COLUMN_STATISTIC_CATEGORY + " integer); ";
    

    然后在你的选择中

    "Select * from " + TABLE_STATISTIC + " where " + COLUMN_STATISTIC_DATETIME + " > " + startTime " AND " COLUMN_STATISTIC_DATETIME + " < " + endTime + ";"
    

    将 startTime 和 endTime 添加到您的函数中,它们应该以毫秒为单位

    【讨论】:

      【解决方案5】:

      如果您只想获取指定天数之间的日期,我认为最好的解决方案是在 SQL 中使用 date('now') 函数。所以,我认为这对你来说是一个更好的解决方案

      SELECT * FROM TABLE_STATISTIC WHERE COLUMN_STATISTIC_DATETIME BETWEEN DATE('now') and 
      DATE('now','1 day')
      

      而且,如果您想比较设备的本地时间,您可以使用以下方法

      SELECT * FROM TABLE_STATISTIC WHERE COLUMN_STATISTIC_DATETIME BETWEEN DATE('now','localtime') and DATE('now','1 day','localtime')
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-01-11
        • 2018-12-26
        • 1970-01-01
        • 1970-01-01
        • 2014-05-28
        • 2020-03-13
        • 1970-01-01
        • 2020-09-21
        相关资源
        最近更新 更多