SQLite纪元时间,以毫秒为单位

时间:2014-06-17 17:43:03

标签: sqlite time

我在表中有一个时间列,它应该表示时间(在服务器上),以及创建记录时Epoch以来的毫秒数。

但是,strftime("%s")返回一个整数,省略毫秒值。

strftime("%f")显示相对于当前分钟的第二个值,以及与分钟的第二个和纪元同步的毫秒值。

所以看来我可以使用这个相当复杂的陈述来获得我想要的价值:

select CAST(strftime('%s','now') || '.' || substr(strftime('%f','now'),4,3) AS REAL)

这可靠吗?我主要担心的是,我必须两次调用strftime(),第二个值可能会在调用之间推进,以便在得到4.999时得到(例如)3.999 }?我可以想象也许创建一个临时表来存储strftime("%f %s")的结果,然后取两个单独选择的substr,但这更复杂,我不确定是否有必要(是SQLite足够聪明,只能调用strftime()一次并返回相同的结果两次?)有更好的方法吗?

1 个答案:

答案 0 :(得分:2)

很安全。来自documentation

The 'now' argument to date and time functions always returns
exactly the same value for multiple invocations within the same 
sqlite3_step() call.

可以使用以下查询验证:

WITH RECURSIVE   cnt(x,y) AS (
    SELECT 1,1
     UNION ALL
    SELECT 
        x+1,
        CAST(strftime('%s','now') || '.' || substr(strftime('%f','now'),4,3) AS REAL) 
    FROM cnt
    LIMIT 10000)
SELECT x,y FROM cnt;

在我的机器上,此查询需要40毫秒,但所有时间值都相同。