Текущая временная метка SQLite с миллисекундами?

Я сохраняю поле timestamp в столбце SQLite3 как TIMESTAMP DATETIME DEFAULT CURRENT_TIMESTAMP, и мне было интересно, есть ли способ включить миллисекунды в метку времени?

Ответы

Ответ 1

Вместо 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')));

Ответ 2

Чтобы получить количество миллисекунд с начала эпохи, вы можете использовать julianday() с некоторыми дополнительными вычислениями:

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

Ответ 3

Здесь запрос, который будет генерировать метку времени как строку с миллисекундами:

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

Если вы действительно намереваетесь использовать числовое представление, вы можете использовать:

select julianday("now"); 

Ответ 4

Следующий метод не требует умножения или деления и всегда должен давать правильный результат, так как несколько вызовов для получения "сейчас" в одном запросе всегда должны возвращать один и тот же результат:

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

Генерирует количество секунд и объединяет его в миллисекунды с текущей секунды + миллисекунда.