SQLite ORDER BY timestamp 没有给出预期的结果

SQLite ORDER BY timestamp does not give expected results

我在 SQLite 中对 timestamp 进行排序时遇到了一些小困难,我尝试了所有方法,但仍然无法获得正确的结果。

我有一个时间戳,我试着订购它,所以最近的会排在第一位。

我已经尝试过以下代码:

db.each("SELECT values ORDER BY datetime(timestamp) DESC LIMIT 200");
db.each("SELECT values ORDER BY datetime('timestamp') DESC LIMIT 200");
db.each("SELECT values ORDER BY datetime("timestamp") DESC LIMIT 200");
db.each("SELECT values ORDER BY date(timestamp) DESC LIMIT 200");
db.each("SELECT values ORDER BY timestamp DESC LIMIT 200");

不幸的是,最后一个选项给了我一些最接近的结果,它只按时间对时间戳进行排序,例如,11 月 17 日创建的行将正确排序,11 月 18 日创建的行将 "older"。

请看下面的画面:

我的 timestamp 格式如下所示:

Thu Nov 17 2016 11:47:56

这应该是很琐碎的事情,连我都没有弄清楚哪里出了问题。

编辑:

我生成 timestamps 的函数如下所示:

var timestamp = new Date().toString().replace(' GMT+0100 (CET)', '');

字符串 'Thu Nov 17 2016 11:47:56' 不是有效的日期时间字符串。在许多国家,'Thu''Nov' 甚至没有意义。所以通过

db.each("SELECT values ORDER BY timestamp DESC LIMIT 200");

您正在对字符串进行排序。 'Thu''Fri' 之后,因为 'T' 在 aplhabet 中在 'F' 之后,所以在对数据进行降序排序时,你会在星期五之前得到星期四。

使用有效的 SQLite 日期时间格式来存储您的数据,例如'YYYY-MM-DD HH:MM:SS.SSS'。然后您可以使用 ORDER BY timestamp DESC.

轻松排序