android 如何从房间数据库中删除 90 天前的记录

How to delete 90 days older record from room database in android

我正在尝试删除超过 90 天的记录,但它在 room database 中不起作用。我的表中有时间戳。 timestamp 存储记录插入时记录的时间戳。我将时间戳存储在 room database 中的 long 中。

正在插入我的时间戳,请查看图片

我也试过做这样的事情,但也不适合我

@Query("DELETE FROM datacaptureinfoalibi WHERE timeStamp <= strftime('%s', datetime('now', '-90 day') )")
int deleteOlderData(/*long timeStamp*/);

Whosebug 中有很多可用的解决方案,但没有一个适合我

请帮助我,我们将不胜感激。

您可以通过以下查询删除早于特定时间的内容

DELETE FROM table_name WHERE date_field <= date('now','-90 day')

根据您的数据,您以毫秒级别存储数据strftime('%s','2021-05-07') 将导致 1620345600 减少到秒,不是毫秒

因此 none 显示的存储时间戳将小于表达式右侧的结果(并且不会到未来)。

因此您可以将存储的值除以 1000 以减少毫秒数。

例如@Query("DELETE FROM datacaptureinfoalibi WHERE (timeStamp /1000) <= strftime('%s', datetime('now', '-90 day') )") 应该工作 (下面的ex1_seconds)

或者将右手乘以 1000 以增加毫秒:-

例如@Query("DELETE FROM datacaptureinfoalibi WHERE timeStamp <= (strftime('%s', datetime('now', '-90 day') ) * 1000) ")(下ex3_millis)

不需要日期时间函数所以更简单更简洁SQL可以是:-

@Query("DELETE FROM datacaptureinfoalibi WHERE (timeStamp /1000) <= strftime('%s','now', '-90 day')")(下图ex2_seconds)

@Query("DELETE FROM datacaptureinfoalibi WHERE timeStamp <= (strftime('%s','now', '-90 day') * 1000) ")(下图ex4_millis)

演示(右边expression/comparison):-

SELECT 
    strftime('%s',datetime('now','-90 day')) AS ex1_seconds,
    strftime('%s','now','-90 day')  AS ex2_seconds, 
    (strftime('%s',datetime('now','-90 day')) * 1000) AS ex3_millis,
    (strftime('%s','now','-90 day') * 1000) AS ex4_millis;

结果:-

MikeT 的回答对我不起作用

经过这么多次尝试,下面的查询对我有用

@Query("DELETE from datacaptureinfoalibi where timeStamp<=:timeStampOfNinetyDays")
int deleteOlderData(long timeStampOfNinetyDays);