【问题标题】:Updating records older than n minutes更新超过 n 分钟的记录
【发布时间】:2011-02-22 18:39:45
【问题描述】:

我有一个 sqlite 数据库,其中包含一个名为 last_accessed 的数据时间字段和另一个名为 stale 的字段。

如何更新超过 5 分钟的记录的过时字段?

例如

这似乎不起作用。

update mytable set stale=1 where (datetime('now') - last_accessed) > 300;

事实上 选择日期时间('现在') - '2011-02-22 08:48:34'; 返回 0。

如何在 sqlite3 中进行算术运算?

编辑: 由于我将 last_accessed 转换为日期时间,实际上它只需要一个秒字段。你认为我应该将该字段转换为秒字段吗?那么我就不需要像 strftime('%s',time('now')) - strftime('%s',last_accessed) 这样的事情了?

编辑2: 据我所知,没有 difftime 功能。我发现您必须使用 strftime('%s', datetime('now')) - ... 格式才能使其工作。但是,我只是简单地转换为一个整数字段,我直接在其中存储时间(NULL)。

【问题讨论】:

    标签: sqlite


    【解决方案1】:

    我觉得应该是的

    select datetime('now') - datetime('2011-02-22 08:48:34');
    

    或类似的东西(见examples)。

    【讨论】:

    • 那还是不行。已转换为 int 字段。
    【解决方案2】:

    回答这个问题,以防其他人想知道如何在 sqlite 中正确进行日期/时间运算。

    正确答案是:

    update mytable set stale = 1 where strftime('%s', datetime('now')) - strftime('%s', last_accessed) > 300;

    但是,我实际上并不需要表格中的日期时间格式,而是选择了数字字段。我不再寻求这个问题的更多答案。

    谢谢。

    【讨论】:

    • 您应该将此答案标记为已接受。这样可以防止此问题显示为未回答的问题。
    • 只要 stackoverflow 允许,我就会这样做。他们有 2 天的时间来接受您自己问题的答案。
    猜你喜欢
    • 1970-01-01
    • 2013-10-28
    • 2012-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-22
    • 1970-01-01
    相关资源
    最近更新 更多