Android中如何从周日开始从SQLite获取一周数据?
问题:SQLite查询无法获取一周的数据
你遇到的问题出在查询条件的逻辑上,咱们一步步拆解来看:
你的表创建代码
public void onCreate(SQLiteDatabase sqLiteDatabase) { final String query = "CREATE TABLE " + Db_Contract.Db_Fieds.TABLE_NAME + " (" + Db_Contract.Db_Fieds._ID + " INTEGER PRIMARY KEY AUTOINCREMENT," + Db_Contract.Db_Fieds.MONEY + " REAL NOT NULL," + Db_Contract.Db_Fieds.CAT + " TEXT NOT NULL," + Db_Contract.Db_Fieds.DATE + " TIMESTAMP DEFAULT CURRENT_DATE," + Db_Contract.Db_Fieds.TIMESTAMP + " TIMESTAMP DEFAULT CURRENT_TIMESTAMP" + "); "; sqLiteDatabase.execSQL(query); }
你的查询代码
private Cursor getAllCurrentData() { String[] selectArg = new String[]{}; return db.query(Db_Contract.Db_Fieds.TABLE_NAME, null , Db_Contract.Db_Fieds.DATE+ "= date('now', 'weekday 0', '-7 days')", selectArg, null, null, Db_Contract.Db_Fieds.TIMESTAMP); }
错误原因
你写的条件DATE = date('now', 'weekday 0', '-7 days')是精确匹配某一天的日期——这个表达式计算出来的是7天前的那个周日的日期,所以你的查询只会返回那一天的数据,而不是整个一周的记录。
解决方案
根据你的需求,有两种常见的调整方式:
1. 获取过去7天内的所有数据(包含今天)
把查询条件改成大于等于7天前的日期:
private Cursor getAllCurrentData() { String[] selectArg = new String[]{}; return db.query(Db_Contract.Db_Fieds.TABLE_NAME, null , Db_Contract.Db_Fieds.DATE + " >= date('now', '-7 days')", selectArg, null, null, Db_Contract.Db_Fieds.TIMESTAMP); }
2. 获取当前自然周的所有数据(周日到周六)
如果想获取完整的当前周数据(从本周日到本周六),用BETWEEN来限定日期范围:
private Cursor getAllCurrentData() { String[] selectArg = new String[]{}; return db.query(Db_Contract.Db_Fieds.TABLE_NAME, null , Db_Contract.Db_Fieds.DATE + " BETWEEN date('now', 'weekday 0') AND date('now', 'weekday 6')", selectArg, null, null, Db_Contract.Db_Fieds.TIMESTAMP); }
要是你的周历习惯是周一到周日,那可以调整日期计算:
// 周一到周日的范围 Db_Contract.Db_Fieds.DATE + " BETWEEN date('now', 'weekday 1', '-1 days') AND date('now', 'weekday 1', '+5 days')"
这样就能正确获取你想要的一周数据啦。
内容的提问来源于stack exchange,提问作者user3359125
相关产品推荐
相关产品推荐

