2013-07-10 49 views
17

Tôi đang lưu trữ một trường dấu thời gian trong một cột SQLite3 là TIMESTAMP DATETIME DEFAULT CURRENT_TIMESTAMP và tôi đã tự hỏi liệu có cách nào để nó bao gồm mili giây trong dấu thời gian không?Dấu thời gian hiện tại SQLite bằng mili giây?

+0

dấu thời gian là số giây mà trôi qua kể từ ngày 01 tháng 1 năm 1970 nên đoán bạn sẽ cần một trường cho mili giây – fsw

+0

Thời gian POSIX được định nghĩa là thời gian trôi qua mili giây kể từ nửa đêm 01-Jan-1970 UTC. Tôi sẽ nói rằng bằng cách sử dụng mili giây như một dấu thời gian là ok miễn là bạn chắc chắn đó là thời gian POSIX (tức là trong UTC). Nếu không, việc sử dụng mili giây cho dấu thời gian địa phương là rất bất thường và bạn nên sử dụng các định dạng thời gian bằng số khác thay thế. Xem: http://stackoverflow.com/questions/32670064/how-do-i-get-posix-time-utc-from-a-serial-value-local-date-time-with-the-java – scottb

Trả lời

24

Thay vì CURRENT_TIMESTAMP, sử dụng (STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')) để định nghĩa cột của bạn trở thành:

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

Ví dụ:

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

Với Oracle nền '% f' có vẻ lạ lùng, nó giống như' TO_DATE (... SS.FFF ') của Oracle ' – TWiStErRob

8

Dưới đây là một truy vấn mà sẽ tạo ra một dấu thời gian như là một chuỗi với mili giây:

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

Nếu bạn thực sự uốn cong về việc sử dụng một số đại diện, bạn có thể sử dụng:

select julianday("now"); 
14

Để có được số mili giây kể từ kỷ nguyên bạn có thể sử dụng julianday() với một số tính toán thêm:

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

Tôi ước có một cách trực quan hơn một chút. – dakab

Các vấn đề liên quan