我正在尝试创建一个查询来删除 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。我期待 >=
的行为,但似乎我只得到 >
,有什么我错过的吗?这里有包容性/排他性吗?
我相信你的问题是
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
是另一个修饰符