SQLite 当前时间戳(毫秒)?

问题描述 投票:0回答:6

我在 SQLite3 列中将时间戳字段存储为

TIMESTAMP DATETIME DEFAULT CURRENT_TIMESTAMP
,我想知道是否有任何方法可以在时间戳中包含毫秒?

sql sqlite
6个回答
54
投票

使用

CURRENT_TIMESTAMP
代替
(STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW'))
,以便您的列定义变为:

TIMESTAMP DATETIME DEFAULT(STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW'))

例如:

CREATE TABLE IF NOT EXISTS event
(when_ts DATETIME DEFAULT(STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')));

30
投票

要获取自纪元以来的毫秒数,您可以使用

julianday()
进行一些额外的计算:

-- Julian time to Epoch MS     
SELECT CAST((julianday('now') - 2440587.5)*86400000 AS INTEGER); 

14
投票

以下方法不需要任何乘法或除法,并且应该始终产生正确的结果,因为在单个查询中多次调用 get 'now' 应该始终返回相同的结果:

SELECT strftime('%s','now') || substr(strftime('%f','now'),4);

生成秒数并将其连接到当前秒+毫秒的毫秒部分。


12
投票

这是一个查询,它将生成时间戳作为带有毫秒的字符串:

 select strftime("%Y-%m-%d %H:%M:%f", "now"); 

如果你真的想使用数字表示,你可以使用:

select julianday("now"); 

5
投票

接受的答案只给你UTC。如果您需要本地时间而不是 UTC,请使用:

strftime('%Y-%m-%d %H:%M:%f', 'now', 'localtime')

0
投票

又一个纪元ms方法

SELECT unixepoch('subsecond') * 1000;
1703231951563.0

该值是

real
,但在
integer
列中,该值将被转换。

CREATE TABLE "items" (
  "created_at" integer default(unixepoch('subsecond') * 1000) not null
);

cast(x as int)

SELECT cast(unixepoch('subsecond') * 1000 as int);
1703231955581
© www.soinside.com 2019 - 2024. All rights reserved.