以毫秒精度减去和汇总日期

时间:2013-12-04 11:57:22

标签: sqlite

我有一个包含两列的表格,其中包含日期时间,特别是time_startedtime_ended。我想确定这两次定义的持续时间并总结所有持续时间。

这是我的尝试:

select strftime('%H:%M:%S.%f', sum(duration), 'unixepoch') 
from (
    select strftime('%s', time_ended) - strftime('%s', time_started) as duration
    from mytable
)

这不起作用的原因是strftime('%s', time_started)返回seconds since 1970-01-01整数数。这意味着我将失去毫秒。

有没有办法获得自1970-01-01以来的 小数 秒数?

请注意,日期时间值的格式与此示例相同:“2013-04-24 14:57:30.661259”。


更新,现在使用julianday(),@ LS_dev在答案中的建议:

select strftime('%H:%M:%f', sum(duration)) 
from (
    select julianday(time_ended) - julianday(time_started) as duration
    from mytable
)

但仍存在两个问题:

  • 总和的结果比他们应该的更多12小时(!)
  • 毫秒被截断为三位数,看起来像strftime()的限制

1 个答案:

答案 0 :(得分:1)

使用JULIANDAY

select duration*24*60*60
from (
    select JULIANDAY(time_ended) - JULIANDAY('%s', time_started) as duration
    from mytable
)

编辑:“为你完成所有工作”的解决方案:

SELECT *, TIME("00:00", CAST(Duration AS INT)||' seconds')||SUBSTR(Duration-CAST(Duration AS INT), 2)
FROM (
    SELECT *, (JULIANDAY(time_ended) - JULIANDAY(time_started))*60*60*24 as Duration
    FROM mytable
)

签入SQL Fiddle