我在 SQLite 中对时间戳进行排序时遇到了一些小困难,我尝试了所有方法,但仍然无法获得正确的结果。
我有一个时间戳,我尝试对其进行排序,因此最新的将是第一个。
我已经尝试过以下代码:
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 日创建的行将“较旧”。
请参阅以下屏幕:
我的时间戳
格式如下所示:
Thu Nov 17 2016 11:47:56
这应该是非常微不足道的,即使我没有弄清楚出了什么问题。
编辑:
生成时间戳
的函数如下所示:
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'
之后,因为在 aplhabet 中 'T'
位于 'F'
之后,因此,当对数据进行降序排序时,您会在星期五之前得到星期四。
使用有效的 SQLite 日期时间格式来存储数据,例如'YYYY-MM-DD HH:MM:SS.SSS'
。然后您可以使用 ORDER BY timestamp DESC
轻松排序。
关于SQLite ORDER BY 时间戳没有给出预期结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40678613/