SQLite中两个高精度时间戳之间的差异

Posted

技术标签:

【中文标题】SQLite中两个高精度时间戳之间的差异【英文标题】:Difference between two timestamps in SQLite with high precision 【发布时间】:2016-04-18 12:00:50 【问题描述】:

我需要获取 SQLite 中两个时间戳之间的差异。 在搜索时,我找到了this question,虽然乍一看接受的答案似乎有效,但它失去了很多精度:

接受这个查询

select timestamp, EndTimeStamp, ((julianday(EndTimeStamp)-julianday(timestamp)) * 86400.0) as Duration from X

我得到这个结果:

"2016-04-18 13:44:31.630916"    "2016-04-18 13:44:31.63114" "0.00100582838058472"
"2016-04-18 13:44:31.6315231"   "2016-04-18 13:44:31.6316997"   "0.0"
"2016-04-18 13:44:31.6320359"   "2016-04-18 13:44:31.632202"    "0.0"
"2016-04-18 13:44:31.6326964"   "2016-04-18 13:44:31.6329361"   "0.0"

如您所见,最后三个结果的计算差异为零,但时间戳实际上不同。

是否可以在 SQL 中使用 DATETIME 字段类型计算精确的差异?我宁愿不需要回退到 C#。

【问题讨论】:

【参考方案1】:

作为documented,内置日期/时间函数解释的格式为:

YYYY-MM-DD HH:MM:SS.SSS

换句话说,它们只解析小数秒的前三位。

您可以尝试使用substr() 提取额外的数字,并以正确的比例将它们添加到结果中。

【讨论】:

我刚刚意识到 SQLite 将日期保存为字符串,而不是专用的 DATETIME 类型,所以现在这种行为是有意义的。谢谢。

以上是关于SQLite中两个高精度时间戳之间的差异的主要内容,如果未能解决你的问题,请参考以下文章