繁体   English   中英

如何从 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*/);

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM