【问题标题】:How to search epoch timestamps in a SQLite database by inconclusive date range?如何通过不确定的日期范围在 SQLite 数据库中搜索纪元时间戳?
【发布时间】:2017-01-09 23:32:40
【问题描述】:

我有一个如下所示的 SQLite 数据库:

timestamp    user   action  
------------------------------
1236643200   John   ABC
1236711411   Bob    ABC
1236711516   Bob    ABC
1236711518   Sarah  ABC
1236711519   John   ABC

我想按08/15/2016-09/30/2016 这样的日期范围进行搜索。这样做最优雅的方式是什么?

这不起作用:

SELECT * FROM events WHERE (timestamp BETWEEN 09/30/2016 AND 08/15/2016)

这是因为时间戳存储为整数。那么如何在进行搜索之前将09/30/2016 转换为纪元时间戳呢?我尝试使用strftime,有很多选择,但我就是不能用它做我想做的事?

【问题讨论】:

    标签: database sqlite search timestamp


    【解决方案1】:

    sqlite 可以理解YYYY-MM-DD 形式的日期。例如:

    sqlite> SELECT strftime('%s','2016-09-30');
    1475193600
    

    如果你没有那个格式的日期,你必须先转换它:

    sqlite> SELECT strftime('%s',substr('09/30/2016',7,4) || '-' || substr('09/30/2016',1,2) || '-' || substr('09/30/2016',4,2));
    1475193600
    

    请注意,如果您使用的是日期范围,则可能需要在该范围的上限上增加 1 天,以确保它包含完整的最后一天。所以你会有类似的东西:

    SELECT * FROM events WHERE timestamp BETWEEN strftime('%s','2016-08-15') AND strftime('%s','2016-09-30','1 day')
    

    【讨论】:

      猜你喜欢
      • 2019-04-20
      • 2016-11-17
      • 1970-01-01
      • 2019-11-17
      • 1970-01-01
      • 1970-01-01
      • 2016-09-08
      • 2016-10-15
      • 2019-02-01
      相关资源
      最近更新 更多