Бих гласувал за използването на времеви печати на Unix (брой секунди от „епохата“), като се има предвид, че те са удобни за изчисляване на диапазона и разбираеми от повечето стабилни библиотеки за дата и час.
SQLite предоставя няколко помощни функции за работа с времеви марки на Unix. Най-полезният тук ще бъде strftime
.
Можете да вмъкнете текущото времеви печат на Unix, като използвате strftime('%s', 'now')
във вашия INSERT.
По-късно, ако знаете конкретен времеви диапазон, който ви интересува, можете да изчислите минималните и максималните времеви отпечатъци за този диапазон и да изберете редове между тях:
SELECT * FROM data
WHERE timestamp >= strftime('%s', '2012-12-25 00:00:00')
AND timestamp < strftime('%s', '2012-12-25 01:00:00');
Или, ако предположим, че искате да преброите заявките за една година по месеци:
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);
Чрез умно използване на опциите за формат strftime
предоставя, вероятно можете да решите повечето от тези заявки доста бързо.