【问题标题】: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 中非常重要。