【问题标题】:How to delete 90 days older record from room database in android如何从 android 的房间数据库中删除 90 天前的记录
【发布时间】:2021-11-29 21:40:59
【问题描述】:

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

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

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

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

stackoverflow 中有很多可用的解决方案,但没有一个对我有用

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

【问题讨论】:

  • 请编辑您的问题以显示您如何存储时间戳,或者使用工具查看实际数据并将其包含在内。 timestamp 存储插入记录时记录的时间戳。 说的很少 BUT 如果你得到,说时间以毫秒为单位 (System.currentTimeMillis()) 然后@ 987654329@ 将返回 null,因为数据未以可识别的格式存储。您可能需要使用unixepoch 修饰符。见sqlite.org/lang_datefunc.html
  • 请检查添加的表格预览数据

标签: android sqlite android-room


【解决方案1】:

从您的数据中,您以毫秒级别存储数据 strftime('%s','2021-05-07') 将导致 1620345600 降至秒,不是毫秒

因此,显示的所有存储时间戳都不会小于表达式右侧的结果(并且不会在未来出现)。

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

例如@Query("DELETE FROM datacaptureinfoalibi WHERE (timeStamp /1000) &lt;= strftime('%s', datetime('now', '-90 day') )") 应该可以工作(ex1_seconds 以下)

或交替将右手乘以 1000 以添加毫秒:-

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

不需要 datetime 函数,所以更简单更简洁的 SQL 可以是:-

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

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

演示(表达式/比较的右侧):-

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;

结果:-

【讨论】:

    【解决方案2】:

    您可以通过以下查询删除比特定时间更早的时间

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

    【讨论】:

    • 已经尝试过但不适合我
    【解决方案3】:

    thisMikeT 回答对我不起作用

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-29
      • 1970-01-01
      • 2022-01-05
      • 2018-07-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多