我是 Android 开发的完全初学者,遇到了一个相当简单的问题(我猜是 ;))。我正在尝试从 SQLite(使用 Room)检索过去 30 天的记录。这是我的查询不起作用 - 它不返回任何记录(来自@Dao 类): // getting fares for one day (custom-made query)@Query("SELECT * FROM fare WHERE createdDateDb >=datetime('now', 'now', '-30 day')")public List<Fare> getFaresOneDay();但是,这个简单的查询检索所有没有指定日期的记录确实有效: // getting all fare (via custom-made query)@Query("SELECT * FROM fare ORDER BY createdDateDb DESC")public List<Fare> getAllFares();这是我的 DateTypeConverter 类:public class DateTypeConverter { @TypeConverter public long convertDateToLong(Date date) { return date.getTime(); } @TypeConverter public Date convertLongToDate(long time) { return new Date(time); }}这是将值分配给 createdDateDb 的方式(在将其插入数据库之前):fare.setCreatedDateDb(new Date());这是我的“实体”类:@Entity(tableName = "fare")public class Fare { private String fareValue; private String typeOfJob; @PrimaryKey(autoGenerate = true) @NonNull private Integer jobId; // dates used for user display private String createdDate; private String createdTime; // date var used for comparisons - not to be displayed for the user private Date createdDateDb;}以及 createdDateDb 的 setter 和 getter// #6 createdDateDb getterpublic Date getCreatedDateDb() { return createdDateDb;}// #6 createdDateDb setterpublic void setCreatedDateDb(Date createdDateDb) {this.createdDateDb = createdDateDb; }我真的很感激一些如何处理它的提示,因为感觉我无处可去。我还尝试了以下方法:SELECT * FROM fare WHERE createdDateDb BETWEEN datetime('now', 'start of month') AND datetime('now', 'localtime')不幸的是它也不起作用。
3 回答
POPMUISE
TA贡献1765条经验 获得超5个赞
使用DATE
SQLITE 函数
@Query("SELECT * FROM fare WHERE createdDateDb >= DATE('now', '-30 day')")
LEATH
TA贡献1936条经验 获得超6个赞
我遇到了这个问题,但我试图从 1 年前开始获取寄存器,当我搜索解决方案时,我发现了这篇文章。我是这样解决的
SELECT * FROM my_table WHERE CAST(my_date/1000 AS LONG) >= strftime('%s', 'now', '-12 month')
使用 calendar.getTime() 存储数据(以毫秒为单位)
解释:
由于 strftime 函数返回 SECONDS 的值,我必须将我的毫秒值除以 1000 并将其强制转换为 long,因为 sql 将除法结果作为整数返回,然后它才能正常工作
添加回答
举报
0/150
提交
取消