2013-07-10 280 views
17

我在SQLite3列中存儲了一個時間戳字段TIMESTAMP DATETIME DEFAULT CURRENT_TIMESTAMP,我想知道是否有任何方法讓它在時間戳中包含毫秒數?SQLite當前時間戳與毫秒?

+0

TIMESTAMP是自1月1日該經過的秒數1970年這樣想你會需要另一個字段,單位爲毫秒 – fsw

+0

POSIX時間定義爲從UTC-Jan-1970年1月1日午夜開始經過的毫秒數。我會說,只要你確定它是POSIX時間(即以UTC),使用毫秒作爲時間戳就可以。否則,對本地時間戳使用毫秒是非常不尋常的,您應該使用其他數字時間格式。請參閱:http://stackoverflow.com/questions/32670064/how-do-i-get-posix-time-utc-from-a-serial-value-local-date-time-with-the-java – scottb

回答

24

代替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'))); 
+0

與Oracle背景'%f'本身看起來很奇怪,它和Oracle的'TO_DATE(... SS.FFF')一樣' – TWiStErRob

8

這裏有一個查詢,將產生一個時間戳,與毫秒的字符串:

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

如果你在使用一個數字表示真彎曲,你可以使用:

select julianday("now"); 
14

要獲得毫秒紀元以來,您可以使用julianday()一些額外的運算次數:

SELECT CAST((julianday('now') - 2440587.5)*86400000 AS INTEGER) 
+1

我希望有一個更直觀的方法。 – dakab