SQLite ORDER BY 时间戳没有给出预期结果

标签 sqlite datetime timestamp sql-order-by

我在 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 日创建的行将“较旧”。

请参阅以下屏幕:

enter image description here

我的时间戳格式如下所示:

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/

相关文章:

arrays - 从 BASH 数组创建 SQLite3 表

java - JodaTime 字符串 yyyy-mm-ddThh :mmss. Z 到日期时间

php - 我的日期未以日期时间格式正确保存到 MySQL

php - 在每天开始时自动创建表行

java - 使用 JMSTIMESTAMP 在 MQ QUEUE 中获取消息

sqlite - SQL-选择按多个字段分组的前n个,按计数排序

JavaScript 数据库

python-2.7 - sqlite3 python 2.7 如何从 sqlite3 启用更详细的错误报告(异常)?

java - Jackson Joda 模块将 ISO 日期反序列化为 Joda DateTime

javascript - JavaScript 中的时间戳不一致?