【发布时间】:2019-08-12 02:44:38
【问题描述】:
我有一个带有“条目”表的房间数据库,其中有 value(int)、cat_id(int) 和 date(Date) 列。
我想得到当月所有条目和当周所有条目的总和。但是选择:
@Query("SELECT sum(value) FROM Entry WHERE cat_id = :cat_id AND WEEK(date, 5) = WEEK(:date, 5) AND YEAR(date) == YEAR(:date)")
float getValueThisWeekByCatId(int cat_id, Date date);
@Query("SELECT sum(value) FROM Entry WHERE cat_id = :cat_id AND MONTH(date) = MONTH(:date) AND YEAR(date) == YEAR(:date)")
float getValueThisMonthByCatId(int cat_id, Date date);
不工作。
这是错误:
查询有问题:[SQLITE_ERROR] SQL 错误或缺失 数据库(没有这样的功能:WEEK) float getValueThisWeekByCatId(int cat_id, Date date);与函数 MONTH 相同
还有其他方法可以选择吗?
【问题讨论】:
-
Sqlite 日期和时间函数(以及它们接受的时间戳格式):sqlite.org/lang_datefunc.html 你可能想要
strftime()。 -
@Shawn
strftime()有效,但它总结了每个条目,而不仅仅是我想要的。例如,一个条目的日期为“2019-03-19”,值为“50”,一个条目的日期为“2019-02-20”,值为“30”。我的查询是这样的:Query("SELECT sum(value) FROM Entry WHERE cat_id = :cat_id AND strftime('%m', date) = strftime('%m', CURRENT_DATE) AND strftime('%Y', date) = strftime('%Y', CURRENT_DATE)") float getValueThisMonthByCatId(int cat_id);应该是 50,但它是 80。 -
查看这个Android房间数据库stackoverflow.com/a/48135885/7710739
标签: java android sqlite kotlin android-room