Room SQLite:使用 strftime 计算记录自创建以来的年龄

问题描述 投票:0回答:1

我正在尝试创建一个查询来删除 30 天及以上的所有记录。使用 ChatGPT 这就是结果

DELETE FROM posts WHERE strftime('%s', 'now') - strftime('%s', date) >= 30*24*60*60

但是执行此操作后,它不会删除已经存在 30 天的项目,并且仅在达到 31 天时才会删除。

我正在测试它,其中

date
2024-02-29T23:00:00
。根据我的时区(GMT +8),它是 2024 年 3 月 2 日凌晨 3:00。我期待
>=
的行为,但似乎我只得到
>
,有什么我错过的吗?这里有包容性/排他性吗?

sqlite android-room strftime
1个回答
0
投票

我相信你的问题是

now
是UTC,而你的值是当地时间。

如果是这样,那么您需要调整其中一个以匹配另一个。

您可以使用“localtime”修饰符将

now
更改为本地时间,或者使用“utc”修饰符将
date
更改为 UTC。

使用

localtime
那么你可以使用:-

.... WHERE strftime('%s','now','localtime') - strftime('%s',date) >= (30 * 24 * 60 * 60)

或更简单的

.... WHERE datetime('now','localtime','-30 days') >= datetime(date)
  • 您可能希望参考https://www.sqlite.org/lang_datefunc.html#modifiers(也许还有其他部分)。

  • 使用

    datetime(date)
    而不仅仅是
    date
    可以满足日期和时间之间的
    T
    ,否则会产生不正确的结果。

  • -30 days
    -30 day
    是另一个修饰符

© www.soinside.com 2019 - 2024. All rights reserved.