Tôi muốn bỏ phiếu cho việc sử dụng dấu thời gian Unix (số giây kể từ "kỷ nguyên"), vì chúng thuận tiện cho việc tính toán phạm vi và được hiểu bởi hầu hết các thư viện ngày-giờ mạnh mẽ.
SQLite cung cấp một vài hàm trợ giúp để làm việc với dấu thời gian Unix. Cái hữu ích nhất ở đây sẽ là strftime
.
Bạn có thể chèn dấu thời gian Unix hiện tại bằng cách sử dụng strftime('%s', 'now')
trong CHÈN của bạn.
Sau đó, nếu bạn biết một phạm vi thời gian cụ thể mà bạn quan tâm, bạn có thể tính dấu thời gian tối thiểu và tối đa cho phạm vi đó và chọn các hàng giữa chúng:
SELECT * FROM data
WHERE timestamp >= strftime('%s', '2012-12-25 00:00:00')
AND timestamp < strftime('%s', '2012-12-25 01:00:00');
Hoặc giả sử bạn muốn đếm số lượng yêu cầu của một năm theo tháng:
SELECT strftime('%m', timestamp), count(*) FROM Data
WHERE timestamp >= strftime('%s', '2012-01-01 00:00:00')
AND timestamp < strftime('%s', '2013-01-01 00:00:00')
GROUP BY strftime('%m', timestamp);
Thông qua việc sử dụng thông minh các tùy chọn định dạng strftime
cung cấp, bạn có thể giải quyết hầu hết các truy vấn đó khá nhanh chóng.