24

我想删除表 MYTABLE 中所有早于 x 天的行。Column SAVE_DATE Long 是该行插入到表中的时间。

我试过这个,但显然它删除了我所有的行:

long daysInMiliSec = new Date().getTime() - X
            * (24L * 60L * 60L * 1000L);
return db.delete(MYTABLE , SAVE_DATE
            " <= ?", new String[] { "" + daysInMiliSec }

怎么了?

4

4 回答 4

47

下面的查询将删除超过 2 天的数据:

String sql = "DELETE FROM myTable WHERE Save_Date <= date('now','-2 day')"; 
db.execSQL(sql);
于 2012-08-02T07:07:54.073 回答
13

由于它是谷歌的第一次点击,因此对初学者有更多解释:
您不需要用于访问 sqlite DB 的主程序中的时间/日期函数,而是直接使用 sqlite 日期函数。

您使用年龄的行条目创建表,例如:

CREATE TABLE IF NOT EXISTS test (id INTEGER PRIMARY KEY, text TEXT, age INTEGER)

你写给它

INSERT INTO test (text, age) VALUES ("bla", datetime('now'))

在这里,我使用了“日期时间”,因为这也可以让您稍后搜索小时/分钟/秒。如果你不需要'日期('现在')'就足够了。

下面是对日期函数的解释:https ://www.sqlite.org/lang_datefunc.html

要选择早于例如 5 分钟的所有内容:

SELECT * FROM test WHERE age <= datetime('now', '-5 minutes')

您可以在上面的网站“修饰符”段落下看到更多这些可能性。

于 2015-01-21T02:04:51.517 回答
3

当时间戳或日期字段以毫秒或纪元整数存储时,删除超过 2 天的数据。

DELETE FROM update_log WHERE timestamp <= strftime('%s', datetime('now', '-2 day'));
于 2018-04-25T13:31:49.083 回答
0

使用最新版本的 ORMLite for SQLite Android:http://ormlite.com/sqlite_java_android_orm.shtml,您可以使用以下代码实现此目的:

                        String sql = "DELETE FROM graph WHERE time <= 1522405117";
                        dbHelper.getWritableDatabase().execSQL(sql);
于 2018-03-30T11:47:20.137 回答