我投票支持使用 Unix 时间戳(自“纪元”以来的秒数),因为它们方便进行范围计算并且可以被大多数强大的日期时间库所理解。
SQLite 提供了一些辅助函数 http://www.sqlite.org/lang_datefunc.html用于处理 Unix 时间戳。这里最有用的一个是strftime
.
您可以使用以下命令插入当前的 Unix 时间戳strftime('%s', 'now')
在你的插入中。
稍后,如果您知道感兴趣的特定时间范围,则可以计算该范围的最小和最大时间戳并选择它们之间的行:
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
提供,您可能可以很快地解决大部分查询。