我做错了什么?我知道我应该有结果,但我找不到任何东西
假设日期以 YYYY-MM-DD 格式存储在数据库中,那么您使用的应该可以工作 (不需要单引号作为 ROOM(实际上 SQLite 确实如此)当它绑定传递的参数时))
但是,仅当 dateStart 和 dateEnd 值不同且 dateEnd 比 dateStart 晚时。
但是,如果 dateStart 和 dateEnd 相同,例如,它将不起作用。 2020 年 5 月和 2020 年 5 月。这是因为,例如,如果 mydate 为 2020-05-01,则它大于 2020-05(因为字符串包含额外的字符)。
- 我认为这是您的问题,即您使用 2020-05 和 2020-05 作为传递的参数。
如果您想将 2020-05 与 2020-05(以及之后的 2020-06)一起使用,那么您可以:
-
需要将 2020-05-01(或当天的 00)与 2020-05-31(或当天最多 99)一起使用,因为它是字符串搜索,无效的日期无关紧要。
-
或仅使用 mydate 的相关部分进行搜索
即当使用 2020-05 时,前 7 个字符和示例可能是:-
@Query("SELECT * FROM item WHERE substr(mydate,1,length(:dateStart)) BETWEEN :dateStart AND :dateEnd;")
- 注意 dateStart 和 dateEnd 应该是相同的长度,否则这很灵活。
或
@Query("SELECT * FROM item WHERE strftime('%Y-%m',mydate) BETWEEN :dateStart AND :dateEnd;")
如果以上不是您的问题,那么可能是由于编码问题不是问题的一部分,或者数据库中的数据未以兼容的格式存储(请注意,除非您使用日期时间函数,否则 SQLite不将存储的值视为日期,它只是数据)。
在任何一种情况下,您的问题都没有包含足够的信息来准确说明问题所在,因此您可能希望更新您的问题(可能包括存储数据的快照( Android Studio 的 Database Inspector 可能有用))。