比较 android sqlite 数据库中的日期

Comparing dates in android sqlite database

我正在比较 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 个月的结果以及上述指定日期之间的日期。 我想知道这是一个错误还是我的代码有什么错误。

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

'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 中非常重要。

您应该将日期存储为数据库中的长值。简单的 new Date().getTime() 给你这个值和 new Date(long value) returns 它回来。因此,您可以轻松进行此类查询。

但我可以建议的是:

  • 将您的 table 导出为 CSV,
  • 将日期值更改为正确的 SQLite TimeString 和
  • 删除原来的CSV后重新导入table。

然后,您可以运行这样的查询:

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