sqlite中时间戳的差异

我试图找出 SQLITE 中两个时间戳之间的差异(毫秒),如下所示

select abs(CAST ( (JulianDay(t1.TIME1) - JulianDay(t1.TIME2) ) * 24 * 60 * 60 * 1000 AS INTEGER) ) diff_millisec 
from time_table;

对于此数据:

t1.TIME1 - 14:14:04.446258 
t1.TIME2 - 14:14:04.446377

答案是0。

对于另一组值

t1.TIME1 - 14:13:27.742646
t1.TIME2 - 14:13:27.649184

答案是93

为什么第一组给出 0 ?有没有办法给出精确的值。


POPMUISE
浏览 185回答 1
1回答

胡说叔叔

当使用类似的函数时,SQLite 提供高达毫秒的精度julianday(),因为只有前三位数字(点后)对结果很重要,正如日期和时间函数中提到的那样,因此时间字符串14:14:04.446258和都14:14:04.446377被评估为14:14:04.446和被认为是平等的。因此,您在几毫秒内获得的结果是正确的。如果你想要以微秒为单位的差异,你应该添加 2 次的最后 3 位数字的差异:select abs(CAST(        (JulianDay(TIME1) - JulianDay(TIME2)) * 24 * 60 * 60 * 1000 * 1000 +         (substr(TIME1, -3) - substr(TIME2, -3))        AS INTEGER        )) diff_microsec from time_table;但为了获得更高的准确性,您应该使用strftime()以秒为单位的差值,然后添加以微秒为单位的差值:select abs((strftime('%s', TIME1) - strftime('%s', TIME2)) * 1000 * 1000 +            (substr(TIME1, -6) - substr(TIME2, -6))       ) diff_microsec from time_table;或者:select abs((strftime('%s', TIME1) - strftime('%s', TIME2)) * 1000 * 1000 +            (substr(TIME1, instr(TIME1, '.') + 1) - substr(TIME2, instr(TIME1, '.') + 1))       ) diff_microsec from time_table;请参阅演示。
打开App,查看更多内容
随时随地看视频慕课网APP