比较 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'
我正在比较 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'