SQLite ORDER BY时间戳不会给出预期的结果

时间:2016-11-18 13:42:38

标签: sqlite datetime timestamp sql-order-by

我在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日创建的行将是#34;年龄较大"。

请参阅以下屏幕:

enter image description here

我的timestamp格式如下所示:

Thu Nov 17 2016 11:47:56

这应该是非常微不足道的,即使我没有弄清楚出了什么问题。

修改

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

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

1 个答案:

答案 0 :(得分:2)

字符串'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轻松排序。