[英]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*/);
stackoverflow 中有很多可用的解决方案,但没有一个对我有用
请帮助我,任何帮助将不胜感激。
从您的数据中,您以毫秒级别存储数据strftime('%s','2021-05-07')
将导致 1620345600 下降到秒,而不是毫秒。
因此,所显示的所有存储时间戳都不会小于表达式右侧的结果(并且不会进入未来)。
因此,您可以将存储的值除以 1000 以减少毫秒数。
例如@Query("DELETE FROM datacaptureinfoalibi WHERE (timeStamp /1000) <= strftime('%s', datetime('now', '-90 day') )")
应该有效(ex1_seconds below)
或者将右手乘以 1000 以增加毫秒数:-
例如@Query("DELETE FROM datacaptureinfoalibi WHERE timeStamp <= (strftime('%s', datetime('now', '-90 day') ) * 1000) ")
(ex3_millis 下面)
不需要日期时间 function 所以更简单更简洁 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 below)
演示(表达式/比较的右侧):-
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);
您可以通过以下查询删除超过特定时间的订单
DELETE FROM table_name WHERE date_field <= date('now','-90 day')
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.