2016-11-18 86 views
0

我在SQLite中對timestamp進行排序時遇到了一些小問題,我嘗試了一切,但仍然無法獲得正確的結果。SQLite ORDER BY時間戳不會給出預期的結果

我有一個時間戳,我嘗試命令它,所以最近的將是第一個。

我已經嘗試以下代碼:

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

timestamp格式如下:

Thu Nov 17 2016 11:47:56 

這應該是很微不足道的,甚至我也沒弄明白什麼是錯的。

編輯:

功能在哪裏產生timestamps如下所示:

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

'不幸的是,它不會採取只有日期的時間.' ...請詳細說明這一點,它是如何工作的? –

+0

所以我編輯了我的問題,我希望現在能更好地理解 –

+0

將時間戳存儲爲自時代以來的毫秒,然後您將始終能夠排序。 –

回答

2

字符串'Thu Nov 17 2016 11:47:56'不是有效的日期時間字符串。在許多國家,'Thu''Nov'甚至沒有意義。所以通過

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

你正在排序的字符串。 'Thu'之後'Fri',因爲'T''F'在aplhabet,所以你得到星期四之前排序你的數據降序。

使用有效的SQLite日期時間格式來存儲數據,例如'YYYY-MM-DD HH:MM:SS.SSS'。然後您可以使用ORDER BY timestamp DESC輕鬆排序。

+0

或者,更好的是,從時代開始存儲ms,並且需要時間戳的文本版本,然後使用函數生成它。 –

相關問題