Текущая временная метка 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);
Генерирует количество секунд и объединяет его в миллисекунды с текущей секунды + миллисекунда.