会议室数据库函数WEEK(),MONTH()等

时间:2019-03-21 09:22:53

标签: java android sqlite kotlin android-room

我有一个带有表“ Entries”的会议室数据库,其中有列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功能相同

还有另一种选择方法吗?

1 个答案:

答案 0 :(得分:0)

有点晚了,但由于类似的问题,我偶然发现了这个问题,您在答案中使用strftime的解决方案是正确的。

尝试了您的表和查询,对我有用:

 CREATE TABLE Entry(
       id int primary key,
       cat_id int,
       value int,
       date date
    );

    insert into entry (id, cat_id, value, date) values (1, 1, 50, '2019-03-19');
    insert into entry (id, cat_id, value, date) values (2, 1, 30, '2019-02-20');
    
    SELECT sum(value) 
    FROM Entry 
    WHERE cat_id = 1 
    AND strftime('%m', date) = strftime('%m', '2019-03-01')
    AND strftime('%Y', date) = strftime('%Y', '2019-03-01')

还可以使用CURRENTDATE,但显然必须使用当前日期条目。

Example