【问题标题】:Sqlite delete rows older thanSqlite 删除早于的行
【发布时间】:2018-10-09 07:07:28
【问题描述】:

我在数据库中有记录:

record B with property `Checked` set to be current date in UTC.
record A with property `Checked` set to be current date in UTC - 48 hours.

然后我想创建查询以删除属性 Checked 超过 24 小时的行。

就我而言,只有A 应该被删除。 Checked 在数据库中存储为bigint。

db.Execute("DELETE FROM User WHERE Checked <= strftime('%s', datetime('now', '-1 day'))"); // A and B are not deleted
db.Execute("DELETE FROM User WHERE Checked <= datetime('now', '-1 day')"); // A and B are deleted
db.Execute("DELETE FROM User WHERE Date(checked) <= datetime('now', '-1 day')"); // A and B are not deleted
db.Execute("DELETE FROM User WHERE datetime(checked) <= datetime('now', '-1 day')"); // A and B are not deleted

你有什么想法吗?

【问题讨论】:

  • 您的 Checked 列将 bigint 值存储为 Unix 纪元时间?那么你应该使用datetime(Checked, 'unixepoch')
  • 非常仔细和彻底地阅读sqlite.org/datatype3.html 和sqlite.org/lang_datefunc.html。查看那些datetime() 表达式返回的内容,并查看您要比较的列中的内容。如果仍然不清楚,请重新阅读数据类型页面中的比较部分。

标签: sqlite sqlite-net sqlite-net-extensions


【解决方案1】:

我终于找到了解决办法:

datetime(Checked/10000000 - 62135596800, 'unixepoch') <= datetime('now', '-1 day')

【讨论】:

    猜你喜欢
    • 2017-12-25
    • 2018-10-27
    • 1970-01-01
    • 2019-12-08
    • 1970-01-01
    • 1970-01-01
    • 2015-02-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多