2

在我的数据库中,我有 1 个表date作为列之一,它存储用户在我的表中添加一些数据的日期。

现在我想单独检索当月的数据。我通过谷歌搜索但没有得到适当的答案。

我的表创建代码:

"create table incomexpense(
    _id integer primary key autoincrement,
    "+"price text not null,description text not null,
    "+"quantity text not null,
    "+"total text not null,
    "+"category text not null,
    "+"recurrence text not null,
    "+"date text not null,
    "+"groups text not null,
    "+" recurrenceid text not null);";

谁能帮助如何从当前日期获取第 7 天的日期。

4

2 回答 2

7

如果要“自动”加载当前年份/月份,请使用带有修饰符和格式掩码的 SQLitestrftime函数。'now''%Y-%m'

select strftime('%Y-%m', 'now');

现在,来回答你的问题:

现在我想单独检索当月的数据。

好吧,这里来了一个烂摊子。您不能将日期存储为 datetime 类型,而是以 SQLite 无法使用日期函数解析的格式存储为字符串。因此,您必须将其转换为SQLite 可以理解的格式。

您可以使用通常的substr功能来做到这一点

substr(exp_date, 7) || '-' || substr(exp_date, 4,2) || '-' || substr(exp_date, 1,2)

所以这将dd/mm/yyyy转换为YYYY-mm-dd格式。

所以完整的查询将是:

SELECT *
FROM   incomexpense
WHERE  Strftime('%Y-%m', 'now') = Strftime('%Y-%m', Substr(exp_date, 7)
                                                    || '-'
                                                    || Substr(exp_date, 4, 2)
                                                    || '-'
                                                    || Substr(exp_date, 1, 2)) 

看看这里是如何工作的

于 2012-07-24T20:21:01.580 回答
0

Android 没有像“日期”这样的数据类型。您可以将其存储为字符串并在使用时对其进行适当的解析。因此,使用此选项,除非您检索并解析 Date ,否则您将无法找到当月的记录。

其他选项是将其存储为数字 - Unix 时间,自 1970-01-01 00:00:00 UTC 以来的秒数。

通过 where 子句中的一些计算,您可以找出当月的记录。

于 2012-07-24T12:18:52.260 回答