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中两个高精度时间戳之间的差异的主要内容,如果未能解决你的问题,请参考以下文章

在 Flutter 中显示两个 Firestore 时间戳值之间的差异

在 pyspark sql 中查找两个时间戳之间的差异

MySQL:如何在几秒钟内获得两个时间戳之间的差异

如何使用休眠查询语言查找两个时间戳之间的差异

如何在 JavaScript 中呈现两个时间戳之间的上下文差异?

SparkSQL - 两个时间戳之间的差异(以分钟为单位)