【问题标题】:How do I get a the time difference in seconds in sqlite?如何在 sqlite 中获得以秒为单位的时差?
【发布时间】:2021-02-28 05:43:09
【问题描述】:

我正在尝试获取 sqlite db(运行 sqlite 3.12.1)上两个时间戳之间的时间差(以秒为单位) .

作为参考,我尝试将日期时间字段创建为整数和文本字段,我得到了相同的结果。下面是我正在运行的查询及其产生的结果集。

基本上我是在尝试在 SQL Server 中复制 datediff() 函数

 select cast(JulianDay('now') - JulianDay(last_upd_dt) * 24 * 60 * 60 As Integer) "gives me null value",
 last_upd_dt as "from date",
 datetime('now') as "To date this will be another field in the future",
 (datetime('now') - last_upd_dt  ) as "Gives me 2012 on all records"
 from sqlite_db 

【问题讨论】:

    标签: sql string sqlite datetime date-arithmetic


    【解决方案1】:

    您的代码的问题在于,您应该在日期差异周围使用括号,然后乘以 24 * 60 * 60。
    但是有一种更简单的方法可以在几秒钟内获得 2 个日期之间的差异:

    select strftime('%s', 'now') - strftime('%s', last_upd_dt)
    from sqlite_db
    

    带有'%s' 修饰符的函数strftime() 返回日期的unix 时间戳(自'1970-01-01' 以来的秒数)(前提是其格式为YYYY-MM-DD hh:mm:ss)。

    【讨论】:

      【解决方案2】:

      您的日期值应存储为 TEXT 数据类型,采用 SQLite 支持的格式之一,例如 YYYY-MM-DD HH:MI:SS

      那么,你就可以了

      select (julianday('now') - julianday(last_upd_dt)) * 24 * 60 * 60 as date_diff_seconds
      from mytable
      

      【讨论】:

      • 当我使用格式化为文本的日期时间字段时,我仍然得到一个空值。
      • @LukeHoffman:这是一个演示概念的 db fiddle:dbfiddle.uk/…。如您所见,这按说明工作。
      • 你说得对,我从头开始创建了一个表并且它有效,我想知道为什么它不适用于我的实际数据集....无论如何感谢您的帮助,我会的看看别处,看看我的数据出了什么问题。
      猜你喜欢
      • 1970-01-01
      • 2013-11-30
      • 1970-01-01
      • 2021-10-05
      • 2018-10-10
      • 1970-01-01
      • 1970-01-01
      • 2015-10-09
      • 1970-01-01
      相关资源
      最近更新 更多