1 回答
TA贡献1804条经验 获得超8个赞
当使用类似的函数时,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;
请参阅演示。
- 1 回答
- 0 关注
- 164 浏览
添加回答
举报