【问题标题】:Comparing dates in android sqlite database比较android sqlite数据库中的日期
【发布时间】:2020-10-09 08:00:05
【问题描述】:

我正在比较 android sqlite 数据库中的两个日期 我以格式存储日期

YYYY-MM-DD
Cursor cursor=db.rawQuery("SELECT * FROM "+tableName+" WHERE SALESDATE BETWEEN '2020-1-01' AND '2020-2-01';",null);

它给出了日期为 10、11 和 12 个月以及上述指定日期之间的日期的结果。 我想知道这是一个错误还是我的代码有任何错误。

【问题讨论】:

    标签: android sqlite android-studio android-sqlite date-comparison


    【解决方案1】:

    您应该将您的日期作为长值存储在数据库中。简单的 new Date().getTime() 为您提供此值, new Date(long value) 将其返回。因此,您可以轻松地进行此类查询。

    但我可以建议的是:

    • 将表格导出为 CSV,
    • 将日期值更改为适当的 SQLite TimeString 和
    • 删除原表后重新导入CSV。

    然后,您可以运行如下查询:

    SELECT * FROM tableName WHERE SALESDATE BETWEEN '2020-01-01 00:00:00' AND '2020-02-01 23:59:59'
    

    【讨论】:

      【解决方案2】:

      这里的问题是您的日期文字采用非标准(并且可能不正确)格式。理解以下不等式成立:

      '2020-10-01' > '2020-1-01' AND '2020-10-01' < '2020-2-01'
      

      这是真的,因为文本 10 在字典上比 1 大,但也比 2 小。为避免此问题,请使用正确的日期文字:

      String sql = "SELECT * FROM " + tableName + " WHERE SALESDATE BETWEEN '2020-01-01' AND '2020-02-01';"
      Cursor cursor = db.rawQuery(sql, null);
      

      请注意,SQLite 实际上没有正式的日期类型。因此,始终使用适当的 ISO 格式将日期存储在 SQLite 中非常重要。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-28
        • 1970-01-01
        • 2012-02-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多